首页 > 解决方案 > Flutter,没有国家代码的本地化,可以吗?

问题描述

在实现本地化时,以西班牙语(Espanol)为例,使用的国家太多了,所以我想在初始化的时候排除国家代码(第二个参数值)。这没有问题吗?代码如下。如果您查看 Locale('es'),则后面缺少参数值。

@override
  Widget build(BuildContext context) {
    return MaterialApp(
     supportedLocales: [            
        Locale('en', 'US'),
        Locale('sk', 'SK'),
        Locale('ja', 'JP'),
        Locale('es',),           
      ],
      localizationsDelegates: [           
        AppLocalizations.delegate,         
        GlobalMaterialLocalizations.delegate,         
        GlobalWidgetsLocalizations.delegate,
      ],
      localeResolutionCallback: (locale, supportedLocales) {
        for (var supportedLocale in supportedLocales) {
          if (supportedLocale.languageCode == locale.languageCode &&
              supportedLocale.countryCode == locale.countryCode) {
            return supportedLocale;
          }
        }           
        return supportedLocales.first;
      },
    );
  }

标签: flutter

解决方案


是的,没关系。您只能使用语言代码。

Locale.languageCode、Locale.scriptCode 和 Locale.countryCode

仅限 Locale.languageCode 和 Locale.scriptCode

仅限 Locale.languageCode 和 Locale.countryCode

仅限 Locale.languageCode

Locale.countryCode 仅当所有首选语言环境都不匹配时

返回 supportedLocales 的第一个元素作为后备

你可以这样使用:


// Full Chinese support for CN, TW, and HK
supportedLocales: [
  const Locale.fromSubtags(languageCode: 'zh'), // generic Chinese 'zh'
  const Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hans'), // generic simplified Chinese 'zh_Hans'
  const Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hant'), // generic traditional Chinese 'zh_Hant'
  const Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hans', countryCode: 'CN'), // 'zh_Hans_CN'
  const Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hant', countryCode: 'TW'), // 'zh_Hant_TW'
  const Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hant', countryCode: 'HK'), // 'zh_Hant_HK'
],

您可以从官方文档中阅读更多内容。


推荐阅读