14

I am trying to support multiple languages in my apps. I want to support two languages in my apps: English (en) and Bahasa (id). But, I want my apps to use Bahasa as the default language. I have tried to do this using the plugin easy_localization.

Here is some code from my main.app file

return EasyLocalizationProvider(
      data: data,
      child: MaterialApp(
        debugShowCheckedModeBanner: false,
        title: APP_NAME,

        localizationsDelegates: [
          GlobalMaterialLocalizations.delegate,
          GlobalWidgetsLocalizations.delegate,
          //app-specific localization
          EasylocaLizationDelegate(
              locale: data.locale,
              path: 'assets/strings'
          ),
        ],
        navigatorKey: locator<NavigationService>().navigatorKey,

        supportedLocales: [ Locale('id', 'ID'), Locale('en', 'US')],
        locale: data.savedLocale,


        theme: ThemeData(
          primaryColor: KaskuColor.primary,
          accentColor: Color(0xFFCB0E00),
          fontFamily: PRIMARY_FONT_FAMILY,
          textTheme: TextTheme(
            headline: TextStyle(fontSize: 72.0, fontWeight: FontWeight.bold),
            title: TextStyle(fontSize: 36.0, fontStyle: FontStyle.italic),
            body1: TextStyle(fontSize: 14.0),
          ),
          primarySwatch: Colors.red,
          cursorColor: KaskuColor.primary,
          snackBarTheme: SnackBarThemeData(
            backgroundColor: KaskuColor.snackBarColor
          )
        ),

        home: Splashscreen(),
        routes: {


        },

      ),
    );

Can someone help me? Thanks in advance!

fajar ainul
  • 480
  • 2
  • 8
  • 27
  • Can you please clarify what your issue is. Is your default language not working? What language is your phone set to? – J. S. Jan 06 '20 at 10:16
  • My phone use english as default language. So, I cannot force my apps to use another language (Bahasa) even my phone use english as default language? – fajar ainul Jan 06 '20 at 10:49
  • Is your code not working at all, or are you simply always getting English as the default language? Have you implemented a language changer, or have you tried changing your phone's default language to see if your code is working? – J. S. Jan 06 '20 at 10:59
  • So I want my apps to use Bahasa as default language, for user after first install, no matter what language they set on their phone. I have implemented language change on my apps, again using easy_localization package, and it works perfectly. My apps still using english as default even Bahasa is set on my phone. – fajar ainul Jan 06 '20 at 11:17

5 Answers5

21

You need to use a callback to set a default language. In your MaterialApp widget add localeListResolutionCallback as following:-

MaterialApp(
   ...

   localeListResolutionCallback: (locales, supportedLocales) {

      print('device locales=$locales supported locales=$supportedLocales');

      for (Locale locale in locales) {
         // if device language is supported by the app,
         // just return it to set it as current app language
         if (supportedLocales.contains(locale)) {
            return locale;
         }
      }

      // if device language is not supported by the app,
      // the app will set it to english but return this to set to Bahasa instead
      return Locale('id', 'ID');
   },

   supportedLocales: [Locale('id', 'ID'), Locale('en', 'US')],
   locale: Locale('en', 'US'),
   ...
);

bikram
  • 7,127
  • 2
  • 51
  • 63
4

Latest easy_localization (from version 2.2.1) package provide startLocale which overrides device locale.

fajar ainul
  • 480
  • 2
  • 8
  • 27
2

Only this works for me (Flutter 3.0.4, Dart 2.17.5):

  supportedLocales: const [
    Locale('id', 'ID'),
    Locale('en', 'US'),
  ],
  localeListResolutionCallback: (allLocales, supportedLocales) {
    final locale = allLocales?.first.languageCode;
    if (locale == 'en') {
      return const Locale('en', 'US');
    }
    // The default locale
    return const Locale('id', 'ID');
  },
IvanPavliuk
  • 1,460
  • 1
  • 21
  • 16
1

Have you added the dependencies to use the flutter_localizations? To use the localization package, you will need to use the flutter_localizations package. To do so, you will have to add it as a dependency to your pubspec.yaml file as follows:

dependencies:
   flutter:
     sdk: flutter
   flutter_localizations:
     sdk: flutter

Also, you can refer to the link and check it where you are having difficulties. Also, apologies for the straight forward answer as I am new to this I was not able to comment on your answer. https://www.didierboelens.com/2018/04/internationalization---make-an-flutter-application-multi-lingual/

Jaldhi Mehta
  • 711
  • 6
  • 10
  • I use easy_localization package, should I still use flutter_localizations? – fajar ainul Jan 06 '20 at 11:10
  • I am not sure about the easy_localization package but I researched some of bit that. You can refer to this https://pub.dev/packages/easy_localization which will help you in your answer. – Jaldhi Mehta Jan 06 '20 at 11:21
1

add startLocale to set the language you want as a default language

EasyLocalization(
        supportedLocales: [Locale('en', 'US'),Locale('en', 'CA')],
        path: 'assets', // <-- change patch to your
        fallbackLocale: Locale('en', 'CA'),
        saveLocale: true,
        startLocale:  Locale('en', 'US'),
        child: MyApp(store: store,)
    ),
C. Peck
  • 3,641
  • 3
  • 19
  • 36
moshire
  • 111
  • 1
  • 5