Назад к вопросам
Middle
118
questionbank

Как добавить локализацию в приложение на Flutter?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Добавить локализацию в приложение на Flutter можно с помощью пакета flutter_localizations.

  1. Добавьте зависимость flutter_localizations в pubspec.yaml:
dependencies:
  flutter:
    sdk: flutter
  flutter_localizations: # Добавляем пакет для локализации
    sdk: flutter # Указываем, что это SDK Flutter

  # Другие зависимости вашего проекта

Выполните flutter pub get.

  1. Настройте локализацию в MaterialApp или CupertinoApp:
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';

// Предполагаем, у вас есть класс для делегирования строк, например LocalizationDelegate
import 'package:your_app/l10n/localization_delegate.dart'; 

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // Поддерживаемые наборы локалей
      supportedLocales: const [
        Locale('en', ''), // Английский
        Locale('ru', ''), // Русский
        // ... другие локали
      ],

      // Делегаты, которые предоставляют локализованные значения
      localizationsDelegates: const [
        // Наш делегат для строк приложения
        AppLocalizationDelegate(), 
        // Делегаты для виджетов Material и Cupertino
        GlobalMaterialLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
        // Делегат для текстового направления (LTR/RTL)
        GlobalWidgetsLocalizations.delegate,
      ],

      // Необязательно: обработка изменения локали (например, сохранение выбора пользователя)
      localeResolutionCallback: (locale, supportedLocales) {
        // Логика выбора локали на основе предпочтений пользователя или системной локали
        for (var supportedLocale in supportedLocales) {
          if (supportedLocale.languageCode == locale?.languageCode) {
            return supportedLocale;
          }
        }
        // Если предпочитаемая локаль не поддерживается, возвращаем первую поддерживаемую
        return supportedLocales.first;
      },

      home: MyHomePage(), // Ваш главный экран
    );
  }
}
  1. Создайте файлы локализованных строк. Обычно используется формат ARB (*.arb). Пример файла lib/l10n/app_en.arb:
{
  "appTitle": "My App",
  "helloWorld": "Hello World!"
}

Пример файла lib/l10n/app_ru.arb:

{
  "appTitle": "Мое приложение",
  "helloWorld": "Привет мир!"
}
  1. Сгенерируйте классы доступа к локализованным строкам. Для этого добавьте файл l10n.yaml в корень проекта:
arb-dir: lib/l10n # Папка с ARB файлами
template-arb-file: app_en.arb # Шаблон ARB файла для генерации
output-localization-file: app_localizations.dart # Имя генерируемого файла

Выполните flutter gen-l10n. Это сгенерирует класс AppLocalizations (или другое имя, указанное в l10n.yaml) и делегат AppLocalizationDelegate в папке .dart_tool/flutter_gen/gen_l10n.

  1. Используйте сгенерированный класс для доступа к строкам в вашем приложении:
import 'package:flutter/material.dart';
// Импортируем сгенерированный класс локализации
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; 

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // Получаем экземпляр сгенерированного класса
    final localizations = AppLocalizations.of(context)!; 

    return Scaffold(
      appBar: AppBar(
        title: Text(localizations.appTitle), // Используем локализованную строку
      ),
      body: Center(
        child: Text(localizations.helloWorld), // Используем локализованную строку
      ),
    );
  }
}