Изучение локализации во Flutter: полное руководство по локали Flutter

Локализация играет решающую роль в разработке мобильных приложений, ориентированных на глобальную аудиторию. Flutter, популярный кроссплатформенный фреймворк, предоставляет мощные инструменты и библиотеки для облегчения локализации. В этой статье мы рассмотрим различные методы реализации локализации во Flutter, а также приведем примеры кода.

  1. Использование пакета flutter_localizations:
    Пакет flutter_localizations— это основной пакет Flutter, обеспечивающий поддержку локализации. Он содержит набор предопределенных делегатов локализации для разных языков. Чтобы использовать этот пакет, добавьте в файл pubspec.yamlследующие зависимости:
dependencies:
  flutter_localizations:
    sdk: flutter
  1. Определение и загрузка ресурсов, специфичных для локали:
    Создайте в проекте каталог l10nи определите отдельные файлы .arbдля каждого поддерживаемого языка. Например, app_en.arbдля английского языка и пакет app_fr.arbдля загрузки соответствующих ресурсов, специфичных для локали:
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],
      supportedLocales: [
        Locale('en', 'US'),
        Locale('fr', 'FR'),
      ],
      // ...
    );
  }
}

Виджет

вместе с LocalizationsDelegate:

String localizedString(BuildContext context, String key) {
  return Localizations.of(context, MyLocalizations)!.getString(key);
}
class MyLocalizations {
  static MyLocalizations? of(BuildContext context) {
    return Localizations.of<MyLocalizations>(context, MyLocalizations);
  }
  String getString(String key) {
    // Return the translated string based on the key
  }
}
  1. Динамическое изменение языка приложения.
    Чтобы пользователи могли динамически менять язык приложения, вы можете использовать пакет Intlвместе с пакетом SharedPreferences:
import 'package:intl/intl.dart';
import 'package:shared_preferences/shared_preferences.dart';
class LanguageManager {
  static Future<void> changeLanguage(Locale locale) async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    await prefs.setString('languageCode', locale.languageCode);
    await prefs.setString('countryCode', locale.countryCode ?? '');
  }
  static Locale getCurrentLocale() {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    final languageCode = prefs.getString('languageCode') ?? 'en';
    final countryCode = prefs.getString('countryCode') ?? '';
    return Locale(languageCode, countryCode);
  }
}

В этой статье мы рассмотрели различные методы реализации локализации во Flutter. Используя пакет flutter_localizations, определяя и загружая ресурсы, специфичные для локали, извлекая переведенные строки и включая динамическое изменение языка, вы можете создавать многоязычные приложения, которые обслуживают глобальную базу пользователей. Правильно локализованные приложения улучшают взаимодействие с пользователем и повышают вовлеченность пользователей, что делает его важным аспектом разработки мобильных приложений во Flutter.