首页 > 解决方案 > Flutter 在不更改上下文区域设置的情况下获取小部件中的语言字符串

问题描述

我已经能够使用开发者文档(https://flutter.dev/docs/development/accessibility-and-localization/internationalization)在 Flutter 中实现多语言支持

我想知道是否有一种方法可以访问我们在小部件中定义的语言字符串,但不更改上下文的语言环境

这是我的用例。

我将一组书呈现为卡片网格。内容有不同的语言(例如英语和西班牙语)。现在,根据语言,我想将区域设置中的一些文本字符串仅用于网格的一张卡片。

例如,如果每本书的数据是:语言(en,es),标题(...),no_pages(x)。然后,在呈现网格时,我想将字符串中的“pages”一词用作“Pages”或“Pagina”。

怎么做?谢谢

标签: flutter

解决方案


看看 pub.dev 中的 language_builder 包,非常好用。通过使用 LanguageBuilder 包装根小部件,您可以配置应用程序的语言。告诉您的应用使用手机的语言或从应用手动更改。

void main() {
  runApp(
    MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Language Builder Example',
      home: LanguageBuilder(
        useDeviceLanguage: false,
        defaultLanguage: 'en',
        languagesMap: Languages.languages,
        child: MainPage(),
        //splash: Container(),
      ),
    ),
  );
}

class Languages {
  static Map<String, String> languages = {
    "tr": """{
        "main_page": {
            "title": "Ana Sayfa",
            "second_page": "İkinci Sayfa"
        },
        "second_page": {
            "title": "İkinci Sayfa",
            "main_page": "Ana Sayfa",
            "message":"Bu sayfa 2. sayfadır."
        }
    }""",
    "en": """{
        "main_page": {
            "title": "Main Page",
            "second_page": "Second Page"
        },
        "second_page": {
            "title": "Second Page",
            "main_page": "Main Page",
            "message":"This is 2nd page."
        }
    }""",
    "de": """{
        "main_page": {
            "title": "Hauptseite",
            "second_page": "Zweite Seite"
        },
        "second_page": {
            "title": "Zweite Seite",
            "main_page": "Hauptseite",
            "message":"Dies ist die 2. Seite."
        }
    }"""
  };
}

//MainPage
Scaffold(
  appBar: AppBar(
    title: Text(
        LanguageBuilder.texts['main_page']['title'],
    ),
  ),
),

您可以为您的案例配置上面的示例。有关更多信息,请查看 language_builder:

语言生成器


推荐阅读