Назад к вопросам
Middle
118
questionbank
Как добавить локализацию в приложение на Flutter?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Добавить локализацию в приложение на Flutter можно с помощью пакета flutter_localizations.
- Добавьте зависимость
flutter_localizationsвpubspec.yaml:
dependencies:
flutter:
sdk: flutter
flutter_localizations: # Добавляем пакет для локализации
sdk: flutter # Указываем, что это SDK Flutter
# Другие зависимости вашего проекта
Выполните flutter pub get.
- Настройте локализацию в
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(), // Ваш главный экран
);
}
}
- Создайте файлы локализованных строк. Обычно используется формат ARB (
*.arb). Пример файлаlib/l10n/app_en.arb:
{
"appTitle": "My App",
"helloWorld": "Hello World!"
}
Пример файла lib/l10n/app_ru.arb:
{
"appTitle": "Мое приложение",
"helloWorld": "Привет мир!"
}
- Сгенерируйте классы доступа к локализованным строкам. Для этого добавьте файл
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.
- Используйте сгенерированный класс для доступа к строкам в вашем приложении:
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), // Используем локализованную строку
),
);
}
}