Flutter PRO 팁 #1: 사용자의 언어, 국가 및 통화 가져오기

귀하의 지역이나 지역을 넘어 전 세계에 응용 프로그램을 게시하기로 결정한 경우 특정 기능을 실행하려면 사용자가 장치를 구성한 언어 또는 해당 국가를 얻기 위해 필요하다는 것을 알 수 있습니다. 또는 심지어 해당 국가의 공식 통화는 무엇입니까?

📽 Video version available on YouTube and Odysee





Flutter에는 Localizations.localeOf(context) 객체를 가져오는 Locale 메서드가 있습니다. 이 객체는 사용자에 대한 현지화 정보를 보유하고 있습니다. 그러나 이 정보는 애플리케이션이 지원하는 로케일로 '제한'됩니다.

예를 들어 애플리케이션이 미국과 영국에서 영어를 지원한다고 가정해 보겠습니다. 기본 위젯은 다음과 같습니다.

class App extends StatelessWidget {
  const App({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Flutter get locale',
      supportedLocales: [
        Locale('en', 'US'),
        Locale('en', 'GB'),
      ],
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      home: MainScreen(),
    );
  }
}


이제 다음을 사용하여 이 데이터를 얻을 수 있습니다.

final locale = Localizations.localeOf(context);
final language = locale.languageCode;
final country = locale.countryCode;
final format = NumberFormat.simpleCurrency(locale: locale.toString());
final currencyName = format.currencyName;
final currencySymbol = format.currencySymbol;


전화가 미국 영어로 설정되어 있고 위의 코드를 실행하면 다음 정보를 얻을 수 있습니다.

Language: en

Country: US

Currency: USD



전화가 영국 영어로 구성된 경우 다음을 얻게 됩니다.

Language: en

Country: GB

Currency: GBP



그러나 전화기가 French of France를 구성한 경우 다음과 같이 표시됩니다.

Language: en

Country: US

Currency: USD



미국 영어 및 영국 영어 이외의 다른 현지화 설정에서 이 데이터를 가져오려고 하는 경우에도 마찬가지입니다.

보시다시피 어떤 경우에는 이 데이터를 얻는 것이 우리가 구성한 로케일로 완전히 제한하려는 경우에 유용할 수 있습니다. 그러나 앱이 공식적으로 '지원'하는지 여부에 관계없이 사용자의 언어, 국가 및 통화를 가져와야 하는 경우가 많습니다. 이를 위해 devicelocale 플러그인을 사용할 것입니다.

final locale = await Devicelocale.currentLocale;

String language = '';
String country = '';

if (locale != null && locale.length >= 2) {
  try {
    language = locale.substring(0, 2);
  } catch (e) {
    debugPrint('Error when fetching user language: $e');
  }
}

if (locale != null && locale.length >= 5) {
  try {
    country = locale.substring(3, 5);
  } catch (e) {
    debugPrint('Error when fetching user country: $e');
  }
}

final format = NumberFormat.simpleCurrency(locale: locale.toString());
final currency = format.currencyName;
final currencySymbol = format.currencySymbol;


이전 예에서 프랑스의 프랑스어에 대한 데이터를 얻으려고 하면 다음을 얻게 됩니다.

Language: fr

Country: FR

Currency: EUR



요약하자면, 앱에서 지원하는 로케일 내에서 위치 데이터를 가져오려면 Localizations.localeOf(context)를 사용하십시오. 그러나 supportedLocales에 지정되지 않은 데이터를 가져오려면 devicelocale 패키지를 사용하십시오.

좋은 웹페이지 즐겨찾기