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

Flutter中如何翻译TextSelectionToolbar的复制、剪切等按钮标签

Flutter 翻译TextSelectionToolbar按钮标签方案

不管是使用GetX还是其他第三方开发包,TextSelectionToolbar的按钮文案默认由Flutter组件本地化体系控制,没有正确配置本地化代理时就会默认显示Copy、Cut等英文标签,具体配置方法如下:

前置依赖准备

首先在pubspec.yaml中引入官方本地化依赖,这是所有系统组件文案翻译的基础:

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
  # 使用GetX时需要引入
  get: 对应兼容版本

GetX场景配置

使用GetX时需要在GetMaterialApp中补全组件本地化代理,很多开发者只配置GetX自身的翻译代理、漏掉系统组件代理,是导致工具栏显示英文的核心原因:

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

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

  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      // 配置默认语言、异常回退语言
      locale: const Locale('zh', 'CN'),
      fallbackLocale: const Locale('zh', 'CN'),
      // 核心:补全所有本地化代理
      localizationsDelegates: const [
        // 负责Material风格系统组件(含文本选择工具栏)的文案翻译
        GlobalMaterialLocalizations.delegate,
        // 负责基础组件文案翻译
        GlobalWidgetsLocalizations.delegate,
        // 负责Cupertino(iOS风格)组件文案翻译
        GlobalCupertinoLocalizations.delegate,
        // 此处可追加GetX自定义翻译代理、其他第三方组件需要的本地化代理
      ],
      // 声明应用支持的语言列表
      supportedLocales: const [
        Locale('zh', 'CN'),
        Locale('en', 'US'),
      ],
      home: const HomePage(),
    );
  }
}

配置完成后执行热重启(热重载不会加载本地化配置),文本选择工具栏的Copy、Cut、Paste、SelectAll等按钮就会自动显示为对应语言的官方翻译。

自定义按钮文案

如果不需要官方自带翻译、想自定义按钮显示内容,可以自定义本地化代理覆写对应文案字段:

// 自定义中文本地化类,覆写工具栏按钮文案
class CustomZhMaterialLocalizations extends GlobalMaterialLocalizations {
  const CustomZhMaterialLocalizations();

  @override
  String get copyButtonLabel => '复制';
  @override
  String get cutButtonLabel => '剪切';
  @override
  String get pasteButtonLabel => '粘贴';
  @override
  String get selectAllButtonLabel => '全选';
  // 其他需要自定义的系统组件文案也可以在这里重写
}

// 自定义本地化代理
class CustomLocalizationsDelegate extends LocalizationsDelegate<MaterialLocalizations> {
  const CustomLocalizationsDelegate();

  @override
  bool isSupported(Locale locale) => locale.languageCode == 'zh';

  @override
  Future<MaterialLocalizations> load(Locale locale) async {
    return const CustomZhMaterialLocalizations();
  }

  @override
  bool shouldReload(covariant LocalizationsDelegate<MaterialLocalizations> old) => false;
}

把上面自定义的CustomLocalizationsDelegate放到localizationsDelegates列表的最前面,优先级高于官方代理,就会生效你自定义的文案。

常见踩坑说明

  • 非GetX场景下,只要在原生MaterialApp/CupertinoApp中按同样规则补全本地化代理即可,逻辑完全一致
  • 所有基于Flutter原生EditableText实现的第三方输入框组件,都遵循这套本地化规则,不需要单独修改组件代码
  • 如果配置后还是显示英文,优先检查是否漏加GlobalMaterialLocalizations.delegate、是否执行了热重启

TextSelectionToolbar界面示例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:42:43