使用flutter pub包 easy_localization

1.用終端在桌面創(chuàng)建flutter項(xiàng)目 use_easy_localization 并導(dǎo)入pub包

flutter create use_easy_localization

flutter pub add easy_localization 

2.新建resources/langs文件夾缴阎,加入語(yǔ)言配置json文件,配置中英文兩種語(yǔ)言。

en.json

{
    "title": "HelloWorld",
    "content": {
        "message": "HelloWorld,HelloWorld,HelloWorld"
    }
}

en-US.json

{
    "title": "HelloWorld",
    "content": {
        "message": "HelloWorld,HelloWorld,HelloWorld"
    }
}

zh.json

{
    "title": "世界",
    "content": {
        "message": "世界,世界,世界"
    }
}

zh-CH.json

{
    "title": "世界",
    "content": {
        "message": "世界,世界,世界"
    }
}

3.在 pubspec.yal 配置資源路徑

flutter:
  assets:
    - resources/langs/
    

4.在 ios/Runner/Info.plist 添加key

  <key>CFBundleLocalizations</key>
    <array>
        <string>en</string>
        <string>zh</string>
    </array> 

5.添加 EasyLocalization 組件

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await EasyLocalization.ensureInitialized();

  runApp(
    EasyLocalization(
      child: const MyApp(),
      supportedLocales: const [
        Locale('en', 'US'),
        Locale('zh', 'CH'),
      ],
      path: 'resources/langs',
      assetLoader: const CodegenLoader(),
    ),
  );
}
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: context.localizationDelegates,
      supportedLocales: context.supportedLocales,
      locale: context.locale,
      title: '多語(yǔ)言',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: '多語(yǔ)言'),
    );
  }
}

6.切換語(yǔ)言

/// 切換語(yǔ)言
  void _changeLocale() async {
    if (context.locale.toString() == 'zh_CH') {
      await context.setLocale(context.supportedLocales[0]);
    } else {
      await context.setLocale(context.supportedLocales[1]);
    }
  }

7.完整代碼

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:use_easy_localization/generated/locale_keys.g.dart';

import 'generated/codegen_loader.g.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await EasyLocalization.ensureInitialized();

  runApp(
    EasyLocalization(
      child: const MyApp(),
      supportedLocales: const [
        Locale('en', 'US'),
        Locale('zh', 'CH'),
      ],
      path: 'resources/langs',
      assetLoader: const CodegenLoader(),
    ),
  );
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: context.localizationDelegates,
      supportedLocales: context.supportedLocales,
      locale: context.locale,
      title: '多語(yǔ)言',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: '多語(yǔ)言'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  /// 切換語(yǔ)言
  void _changeLocale() async {
    if (context.locale.toString() == 'zh_CH') {
      await context.setLocale(context.supportedLocales[0]);
    } else {
      await context.setLocale(context.supportedLocales[1]);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text(LocaleKeys.title).tr(),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              LocaleKeys.content.tr(gender: "message"),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _changeLocale,
        tooltip: '切換語(yǔ)言',
        child: const Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

Github代碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市薄翅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌氓奈,老刑警劉巖翘魄,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異舀奶,居然都是意外死亡熟丸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門伪节,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)光羞,“玉大人,你說(shuō)我怎么就攤上這事怀大∩炊遥” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵化借,是天一觀的道長(zhǎng)潜慎。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蓖康,這世上最難降的妖魔是什么铐炫? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮蒜焊,結(jié)果婚禮上倒信,老公的妹妹穿的比我還像新娘。我一直安慰自己泳梆,他們只是感情好鳖悠,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布榜掌。 她就那樣靜靜地躺著,像睡著了一般乘综。 火紅的嫁衣襯著肌膚如雪憎账。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天卡辰,我揣著相機(jī)與錄音胞皱,去河邊找鬼。 笑死九妈,一個(gè)胖子當(dāng)著我的面吹牛反砌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播允蚣,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼呆贿!你這毒婦竟也來(lái)了嚷兔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤做入,失蹤者是張志新(化名)和其女友劉穎冒晰,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竟块,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡壶运,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浪秘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒋情。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖耸携,靈堂內(nèi)的尸體忽然破棺而出棵癣,到底是詐尸還是另有隱情,我是刑警寧澤夺衍,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布狈谊,位于F島的核電站,受9級(jí)特大地震影響沟沙,放射性物質(zhì)發(fā)生泄漏河劝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一矛紫、第九天 我趴在偏房一處隱蔽的房頂上張望赎瞎。 院中可真熱鬧,春花似錦颊咬、人聲如沸煎娇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)缓呛。三九已至催享,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哟绊,已是汗流浹背因妙。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留票髓,地道東北人攀涵。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像洽沟,于是被迫代替她去往敵國(guó)和親以故。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容