You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用intl包为Flutter应用添加印度区域语言支持?

使用intl包为Flutter应用添加印度区域语言支持的完整步骤

一、先理清ARB文件的命名规则

intl包对ARB文件的命名遵循**语言代码(可选加区域代码)**的规范,针对你需要的印度语言:

  • 印地语:语言代码是hi,通用印地语可命名为app_hi.arb;特指印度地区的印地语可命名为app_hi_IN.arb
  • 古吉拉特语:语言代码gu,对应app_gu.arb或app_gu_IN.arb
  • 泰米尔语:语言代码ta,对应app_ta.arb或app_ta_IN.arb

注:如果该语言没有明显区域差异,用app_{语言代码}.arb即可;若需区分不同区域的变体,再加下划线分隔的区域代码(比如IN代表印度)。每个ARB文件内必须包含@@locale字段,值要和文件名的语言/区域代码一致,例如app_hi_IN.arb里的@@locale为hi_IN。

二、具体实现步骤

1. 配置依赖包

确保你的pubspec.yaml中包含以下依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
  intl: ^0.18.1

dev_dependencies:
  intl_generator: ^0.18.1
  build_runner: ^2.4.4

执行flutter pub get安装依赖。

2. 创建ARB翻译文件

在项目根目录下新建lib/l10n文件夹,然后创建基准文件和各语言的翻译文件:

  • 基准英文文件app_en.arb:
{
  "@@locale": "en",
  "helloWorld": "Hello World",
  "welcomeMessage": "Welcome to our app"
}
  • 印地语文件app_hi.arb:
{
  "@@locale": "hi",
  "helloWorld": "नमस्ते दुनिया",
  "welcomeMessage": "हमारे ऐप में आपका स्वागत है"
}
  • 古吉拉特语文件app_gu.arb:
{
  "@@locale": "gu",
  "helloWorld": "નમસ્તે દુનિયા",
  "welcomeMessage": "અમારા એપમાં આપનું સ્વાગત છે"
}
  • 泰米尔语文件app_ta.arb:
{
  "@@locale": "ta",
  "helloWorld": "வணக்கம் உலகம்",
  "welcomeMessage": "எங்கள் பயன்பாட்டிற்கு வரவேற்கிறோம்"
}

3. 生成本地化代码

在终端运行以下命令,自动生成对应的本地化类和消息文件:

flutter pub run build_runner build

执行完成后,lib/generated目录下会生成messages_all.dart、messages_en.dart等自动代码文件,请勿手动修改这些文件。

4. 配置应用的本地化支持

修改main.dart,添加本地化委托和支持的语言列表:

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:intl/intl.dart';
import 'generated/messages_all.dart';

class AppLocalizations {
  static Future<AppLocalizations> load(Locale locale) {
    final localeName = Intl.canonicalizedLocale(
      locale.countryCode == null ? locale.languageCode : locale.toString()
    );
    return initializeMessages(localeName).then((_) {
      Intl.defaultLocale = localeName;
      return AppLocalizations();
    });
  }

  static AppLocalizations of(BuildContext context) {
    return Localizations.of<AppLocalizations>(context, AppLocalizations)!;
  }

  String get helloWorld => Intl.message(
    'Hello World',
    name: 'helloWorld',
    desc: 'Basic greeting',
  );

  String get welcomeMessage => Intl.message(
    'Welcome to our app',
    name: 'welcomeMessage',
    desc: 'App welcome text',
  );
}

class AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {
  const AppLocalizationsDelegate();

  @override
  bool isSupported(Locale locale) => ['en', 'hi', 'gu', 'ta'].contains(locale.languageCode);

  @override
  Future<AppLocalizations> load(Locale locale) => AppLocalizations.load(locale);

  @override
  bool shouldReload(AppLocalizationsDelegate old) => false;
}

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Localization Demo',
      localizationsDelegates: const [
        AppLocalizationsDelegate(),
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: const [
        Locale('en'),
        Locale('hi'),
        Locale('gu'),
        Locale('ta'),
      ],
      home: const HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  const HomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(AppLocalizations.of(context).helloWorld)),
      body: Center(child: Text(AppLocalizations.of(context).welcomeMessage)),
    );
  }
}

5. 测试本地化效果

可以通过两种方式测试:

  1. 切换设备的系统语言到目标语言,重启应用即可看到对应翻译
  2. 在MaterialApp中手动指定locale参数,比如locale: const Locale('hi'),运行后直接查看印地语界面

三、常见注意事项

  • 所有ARB文件中的键名(如helloWorld)必须完全一致,否则生成代码时会报错
  • 每次修改ARB文件后,都需要重新运行flutter pub run build_runner build更新生成的代码
  • 如果需要支持带区域代码的语言变体,比如hi_IN,只需在supportedLocales中添加const Locale('hi', 'IN'),并创建对应的app_hi_IN.arb文件即可

内容的提问来源于stack exchange,提问作者ankushlokhande

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:15:56