在Flutter中支持常量字符串的多种语言

时间:2017-05-20 04:42:48

标签: flutter

我想开始将所有常量字符串(如标签等)放入可以在以后翻译的地方。

如何处理Flutter?

2 个答案:

答案 0 :(得分:3)

我问了gitter,我得到了以下内容:

  

翻译/国际化不是我们考虑的功能"已完成"   然而。 https://pub.dartlang.org/packages/intl在Flutter中有效。我们有   一般来说跟踪这个错误:flutter / flutter#393

     

更完整的国际化(i18n)和可访问性支持   在接下来的几个月里,这是Flutter面前的两大工作。   我们计划的另一个i18n工作的例子正在完成   我们提供的小部件的从右到左(RTL)布局(例如教学)   材质库的脚手架将抽屉放在左侧   语言环境是RTL语言)。 RTL Text支持今天有效,但是   没有任何小部件是开箱即用的RTL布局   时刻。

答案 1 :(得分:2)

  1. 创建Localizations.dart文件

  2. 将以下代码添加到该文件中:

  3. import 'dart:async';
    import 'package:flutter/material.dart';
    
    import 'package:flutter/foundation.dart' show SynchronousFuture;
    class DemoLocalizations {
      DemoLocalizations(this.locale);
      final Locale locale;
      static DemoLocalizations of(BuildContext context) {
        return Localizations.of<DemoLocalizations>(context, DemoLocalizations);
      }
      static Map<String, Map<String, String>> _localizedValues = {
        'en': {
          'title': 'App title',
          'googleLogin': 'Login with Google'
        },
        'es': {
          'title': 'Título de App',
          'googleLogin': 'Conectar con Google'
        },
      };
      String get title {
        return _localizedValues[locale.languageCode]['title'];
      }
      String get googleLogin {
        return _localizedValues[locale.languageCode]['googleLogin'];
      }
    }
    class DemoLocalizationsDelegate extends LocalizationsDelegate<DemoLocalizations> {
      const DemoLocalizationsDelegate();
      @override
      bool isSupported(Locale locale) => ['en', 'es'].contains(locale.languageCode);
    
      @override
      Future<DemoLocalizations> load(Locale locale) {
        // Returning a SynchronousFuture here because an async "load" operation
        // isn't needed to produce an instance of DemoLocalizations.
        return new SynchronousFuture<DemoLocalizations>(new DemoLocalizations(locale));
      }
      @override
      bool shouldReload(DemoLocalizationsDelegate old) => false;
    }
    
    1. Localizations.dart 导入您使用字符串的文件中。

    2. new Text("App Title"),

    3. 替换new Text(DemoLocalizations.of(context).title),

      对于要本地化的每个新字符串,您需要将翻译后的文本添加到每种语言的地图中,然后添加String get ...行。 这有点麻烦,但它可以满足您的需求。

      这是对其中一种方式的快速概述。 您可以在Flutter文档中详细了解它:https://flutter.io/tutorials/internationalization/