首页 > 其他分享 >Flutter插件Get(7):实现语言的国际化

Flutter插件Get(7):实现语言的国际化

时间:2024-11-15 10:31:29浏览次数:1  
标签:插件 国际化 const Get Locale tr 字符串 Flutter

一、前言

除了 Flutter Intl 的方式实现国际化(参考我以前的博客:Flutter进阶(2):国际化开发 - fengMisaka - 博客园),还可以使用 GetX 实现国际化(推荐)。

先看下效果图:

Flutter_multiLanguage.gif

二、GetX 实现国际化(推荐)

新建一个 Flutter 工程,使用 GetX 实现国际化的具体步骤如下:


2.1 安装Getx

pubspec.yaml文件中配置 Get:

dependencies:
	get: ^4.6.5 

2.2 创建国际化的文件

Flutter 要国际化的字符串以键值对的方式保存在字典中。我们要自定义自己的国际化字符串,先创建一个自定义类文件,这里命名为Translation.dart

import 'package:get/get.dart';

// (2)自定义自己的国际化字符串 
class Translation extends Translations {
  @override
  Map<String, Map<String, String>> get keys => {
    // 1-配置中文简体
    'zh_CN': {
      '中国': '中国',
    },

    // 2-配置中文繁体
    'zh_HK': {
      '中国': '中國',
    },
    
    // 3-配置英文
    'en_US': {
      '中国': 'China',
    }
  };
}

2.3 使用国际化字符串

使用字符串的时候非常简单,在字符串后面添加.tr后缀即可。

Text(
  '中国'.tr, // (3)在字符串后面添加.tr后缀即可
),

2.4 配置GetMaterialApp

pubspec.yaml文件中配置 Get:

return GetMaterialApp(
	// ...
  
  // (4)配置GetMaterialApp
  translations: Translation(), // 你的翻译
  locale: const Locale('zh', 'CN'), // 将会按照此处指定的语言翻译
  fallbackLocale: const Locale('en', 'US'), // 添加一个回调语言选项,以备上面指定的语言翻译不存在
  
	// ...
);

2.5 更改语言

使用字符串的时候非常简单,在字符串后面添加.tr后缀即可。

var locale = Locale('en', 'US');
Get.updateLocale(locale);

三、完整示例代码

main.dart:

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'Translation.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});
  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      debugShowCheckedModeBanner: false,

      // (4)配置GetMaterialApp
      translations: Translation(), // 你的翻译类
      locale: const Locale('zh', 'CN'), // 将会按照此处指定的语言翻译
      fallbackLocale: const Locale('en', 'US'), // 添加一个回调语言选项,以备上面指定的语言翻译不存在

      home: const MyHomePage(),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Flutter Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '中国'.tr, // (3)在字符串后面添加.tr后缀即可
              style: const TextStyle(
                  color: Colors.red, fontSize: 50, fontWeight: FontWeight.w700),
            ),
            changeButton(const Locale('zh', 'CN'), '简体'),
            changeButton(const Locale('zh', 'HK'), '繁体'),
            changeButton(const Locale('en', 'US'), '英文'),
          ],
        ),
      ),
    );
  }

  Widget changeButton(Locale newLocale, String text) {
    return ElevatedButton(
      onPressed: () {
        // (5)更改语言
        Get.updateLocale(newLocale);
      },
      child: Text(text),
    );
  }
}

标签:插件,国际化,const,Get,Locale,tr,字符串,Flutter
From: https://www.cnblogs.com/linuxAndMcu/p/18547508

相关文章

  • getDepartmentById方法
    publicDepartmentgetDepartmentById(StringdepartmentId){if(StringUtils.isEmpty(departmentId)){returnnull;}Exampleexample=newExample(Department.class);Example.Criteriacriteria=example.createCriteria();criteria.andEqualTo("departmentId"......
  • 织梦自定义图片字段报错 Call to a member function GetInnerText()
    问题:添加自定义图片字段时,前台打开当前栏目列表出现 Fatalerror:CalltoamemberfunctionGetInnerText()onstring 错误。解决方法:修改 customfields.func.php 文件:打开 /include/customfields.func.php 文件,搜索:  $fvalue=trim($ntag->GetInnerTe......
  • 【Unity相机和角色控制插件】RPG Cameras & Controllers 提供了一套完整的相机和角色
    RPGCameras&Controllers是一款专为RPG游戏设计的Unity插件,提供了一套完整的相机和角色控制系统,帮助开发者快速实现第三人称视角和角色移动控制。这个插件包括了多个自定义选项,允许开发者轻松调整相机和角色控制的行为,适用于动作角色扮演类游戏(ARPG)或传统RPG类型的项......
  • Intellij IDEA如何设置中文版?安装中文汉化包插件?失败问题解决!
    前言大家好,我是小徐啊。IntellijIDEA默认是英文的操作界面,因为是外国人开发的嘛~对于英文好一点的同学来说,英文就英文吧,但对于英文比较差的同学,就还是希望能够汉化一下,变成熟悉的中文。今天小徐就来介绍下如何在IDEA中安装汉化插件,以及在这过程中,我遇到的奇怪问题,以及最后如何......
  • apisix~限流插件的使用
    参考:https://i4t.com/19399.htmlhttps://github.com/apache/apisix/issues/9193https://github.com/apache/apisix/issues/9830https://apisix.apache.org/docs/apisix/plugins/limit-conn/https://blog.frankel.ch/different-rate-limits-apisix/在ApacheAPISIX中,限流......
  • 用两行命令快速搭建深度学习环境(Docker/torch2.5.1+cu118/命令行美化+插件),包含完整的
    深度学习环境的配置过于繁琐,所以我制作了两个基础的镜像,希望可以帮助大家节省时间,你可以选择其中一种进行安装,版本说明:base版本基于pytorch/pytorch:2.5.1-cuda11.8-cudnn9-devel,默认python版本为3.11.10,可以通过condainstallpython==版本号直接修改版本。dl版......
  • vue-pdf插件实现文件预览,pdf要实现翻页显示
    <img:src="fileUrl"v-if="type==='jpg'"/><Pdfv-for="iinnumPage":page="i":key="i":src="fileUrl"v-if="type==='pdf'"/>importPdffrom'vu......
  • 网页web无插件播放器EasyPlayer.js播放器firefox和chrome等浏览器报ws地址连接不上
    EasyPlayer.jsH5播放器,是一款能够同时支持HTTP、HTTP-FLV、HLS(m3u8)、WS、WEBRTC、FMP4视频直播与视频点播等多种协议,支持H.264、H.265、AAC、G711A、Mp3等多种音视频编码格式,支持MSE、WASM、WebCodec等多种解码方式,支持Windows、Linux、Android、iOS全平台终端的H5播放器,使用简单......
  • Flutter图片上传与曝光度、饱和度、对比度调节(优化UI)
    前言:相较于前一版https://blog.csdn.net/m0_73231884/article/details/143768951?spm=1001.2014.3001.5501在这个版本中我将三个参数的按钮整合在了一起,并使用底部弹框的方式展现 其中,我修改了Slider组件的值,最小值为-40,最大值为40 。 源码如下:import'dart:io';i......
  • 无插件H5播放器EasyPlayer.js视频流媒体播放器点播H264、H265需求(点播mp4、Hls)
    EasyPlayer.js视频流媒体播放器属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,无须安装任何插件,起播快、延迟低、兼容性强,使用非常便捷。EasyPlayer.js播放器不仅支持H.264与H.265视频编码格式,也能支持WebSocket-FLV、HTTP-FLV、HLS(m3u8)、WebRTC、ws-fm......