Handling Localization in Dart Applications
Localization in Dart applications, particularly those built with Flutter, allows developers to create apps that can adapt to different languages and regions. This is essential for reaching a global audience and providing a better user experience.
1. Setting Up Localization
To start localizing your Flutter app, you need to add the necessary dependencies in your pubspec.yaml
file:
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
intl: any
After adding the dependencies, run the following command to install them:
flutter pub get
2. Creating ARB Files
Localization strings are typically stored in ARB (Application Resource Bundle) files. Create a directory named lib/l10n
and add your ARB files. For example, create app_en.arb
for English and app_es.arb
for Spanish:
{
"helloWorld": "Hello World!",
"@helloWorld": {
"description": "The conventional newborn programmer greeting"
}
}
{
"helloWorld": "¡Hola Mundo!"
}
3. Configuring Localization in Your App
Create a l10n.yaml
file in the root of your project to configure the localization tool:
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
Next, update your MaterialApp
widget to include the localization delegates and supported locales:
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Localization Sample App',
localizationsDelegates: [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: [
Locale('en', ''), // English
Locale('es', ''), // Spanish
],
home: MyHomePage(),
);
}
}
4. Accessing Localized Strings
To access the localized strings in your widgets, use the AppLocalizations
class:
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(AppLocalizations.of(context)!.helloWorld),
),
body: Center(
child: Text(AppLocalizations.of(context)!.helloWorld),
),
);
}
}
5. Running the App
Once you have set up everything, run your app. The text displayed will change based on the device's locale settings. If the device is set to Spanish, it will show "¡Hola Mundo!" instead of "Hello World!".
6. Conclusion
By following these steps, you can effectively handle localization in your Dart applications. This allows your app to cater to a diverse audience by supporting multiple languages and regional formats.