feat: change language
This commit is contained in:
parent
7dc0994162
commit
da6597f42b
|
@ -79,5 +79,8 @@
|
||||||
"quiz_description_label": "Short Description",
|
"quiz_description_label": "Short Description",
|
||||||
"quiz_subject_label": "Subject",
|
"quiz_subject_label": "Subject",
|
||||||
"make_quiz_public": "Make Quiz Public",
|
"make_quiz_public": "Make Quiz Public",
|
||||||
"save_quiz": "Save Quiz"
|
"save_quiz": "Save Quiz",
|
||||||
|
|
||||||
|
"select_language": "Select Language",
|
||||||
|
"change_language": "Change Language"
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"greeting_time": "Selamat Siang",
|
"greeting_time": "Selamat Siang",
|
||||||
"greeting_user": "Halo {user}",
|
"greeting_user": "Halo {user}",
|
||||||
"create_room": "Buat Ruangan",
|
"create_room": "Buat Ruangan",
|
||||||
"join_room": "Gabung Ruangan",
|
"join_room": "Gabung Ruang",
|
||||||
"create_quiz": "Buat Kuis",
|
"create_quiz": "Buat Kuis",
|
||||||
"ready_new_challenge": "Siap untuk tantangan baru?",
|
"ready_new_challenge": "Siap untuk tantangan baru?",
|
||||||
"search_or_select_category": "Cari atau pilih berdasarkan kategori",
|
"search_or_select_category": "Cari atau pilih berdasarkan kategori",
|
||||||
|
@ -79,5 +79,8 @@
|
||||||
"quiz_description_label": "Deskripsi Singkat",
|
"quiz_description_label": "Deskripsi Singkat",
|
||||||
"quiz_subject_label": "Mata Pelajaran",
|
"quiz_subject_label": "Mata Pelajaran",
|
||||||
"make_quiz_public": "Jadikan Kuis Publik",
|
"make_quiz_public": "Jadikan Kuis Publik",
|
||||||
"save_quiz": "Simpan Kuis"
|
"save_quiz": "Simpan Kuis",
|
||||||
|
|
||||||
|
"select_language": "Pilih Bahasa",
|
||||||
|
"change_language": "Ganti Bahasa"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get_navigation/src/root/get_material_app.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:quiz_app/app/bindings/initial_bindings.dart';
|
import 'package:quiz_app/app/bindings/initial_bindings.dart';
|
||||||
import 'package:quiz_app/app/routes/app_pages.dart';
|
import 'package:quiz_app/app/routes/app_pages.dart';
|
||||||
|
|
||||||
|
@ -10,11 +10,11 @@ class MyApp extends StatelessWidget {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return GetMaterialApp(
|
return GetMaterialApp(
|
||||||
localizationsDelegates: context.localizationDelegates,
|
|
||||||
debugShowCheckedModeBanner: false,
|
|
||||||
supportedLocales: context.supportedLocales,
|
|
||||||
locale: context.locale,
|
|
||||||
title: 'Quiz App',
|
title: 'Quiz App',
|
||||||
|
locale: Get.locale ?? context.locale, // 🔁 This ensures GetX reacts to locale changes
|
||||||
|
fallbackLocale: const Locale('en', 'US'),
|
||||||
|
localizationsDelegates: context.localizationDelegates,
|
||||||
|
supportedLocales: context.supportedLocales,
|
||||||
initialBinding: InitialBindings(),
|
initialBinding: InitialBindings(),
|
||||||
initialRoute: AppRoutes.splashScreen,
|
initialRoute: AppRoutes.splashScreen,
|
||||||
getPages: AppPages.routes,
|
getPages: AppPages.routes,
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
import 'dart:ui';
|
||||||
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:quiz_app/app/routes/app_pages.dart';
|
import 'package:quiz_app/app/routes/app_pages.dart';
|
||||||
import 'package:quiz_app/core/utils/logger.dart';
|
import 'package:quiz_app/core/utils/logger.dart';
|
||||||
|
@ -38,4 +41,10 @@ class ProfileController extends GetxController {
|
||||||
void editProfile() {
|
void editProfile() {
|
||||||
logC.i("Edit profile pressed");
|
logC.i("Edit profile pressed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void changeLanguage(BuildContext context, String languageCode, String countryCode) async {
|
||||||
|
final locale = Locale(languageCode, countryCode);
|
||||||
|
await context.setLocale(locale);
|
||||||
|
Get.updateLocale(locale);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,12 @@ class ProfileView extends GetView<ProfileController> {
|
||||||
controller.editProfile,
|
controller.editProfile,
|
||||||
),
|
),
|
||||||
const SizedBox(height: 12),
|
const SizedBox(height: 12),
|
||||||
|
_buildActionButton(
|
||||||
|
context.tr("change_language"),
|
||||||
|
Icons.language,
|
||||||
|
() => _showLanguageDialog(context),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 12),
|
||||||
_buildActionButton(
|
_buildActionButton(
|
||||||
context.tr("logout"),
|
context.tr("logout"),
|
||||||
Icons.logout,
|
Icons.logout,
|
||||||
|
@ -126,4 +132,34 @@ class ProfileView extends GetView<ProfileController> {
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _showLanguageDialog(BuildContext context) {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (_) => AlertDialog(
|
||||||
|
title: Text(context.tr("select_language")),
|
||||||
|
content: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
ListTile(
|
||||||
|
leading: const Icon(Icons.language),
|
||||||
|
title: const Text("English"),
|
||||||
|
onTap: () {
|
||||||
|
controller.changeLanguage(context, 'en', 'US');
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
ListTile(
|
||||||
|
leading: const Icon(Icons.language),
|
||||||
|
title: const Text("Bahasa Indonesia"),
|
||||||
|
onTap: () {
|
||||||
|
controller.changeLanguage(context, 'id', "ID");
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,6 @@ void main() {
|
||||||
]);
|
]);
|
||||||
|
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
|
|
||||||
await EasyLocalization.ensureInitialized();
|
await EasyLocalization.ensureInitialized();
|
||||||
|
|
||||||
runApp(
|
runApp(
|
||||||
|
@ -24,9 +23,11 @@ void main() {
|
||||||
supportedLocales: [
|
supportedLocales: [
|
||||||
Locale('en', 'US'),
|
Locale('en', 'US'),
|
||||||
Locale('id', 'ID'),
|
Locale('id', 'ID'),
|
||||||
|
Locale('ms', 'MY'),
|
||||||
],
|
],
|
||||||
path: 'assets/translations',
|
path: 'assets/translations',
|
||||||
fallbackLocale: Locale('en', 'US'),
|
fallbackLocale: Locale('en', 'US'),
|
||||||
|
useOnlyLangCode: false,
|
||||||
child: MyApp(),
|
child: MyApp(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue