如何加载区域设置以使用拉丁文和西里尔文塞尔维亚文

时间:2020-04-11 08:27:35

标签: flutter locale

在Flutter中,我想将Locale设置为与英语(也与塞尔维亚语言)分开使用。问题是英语很简单,就像这样:

Locale('en', 'US')

其中包括名为lang的{​​{1}}文件夹中的常规文件

但是对于塞尔维亚语言环境,有西里尔字母和拉丁语,我需要包含2个文件,并且需要加载2个语言环境。在Flutter的语言环境文档中,我发现this并显示:

en.json

我尝试用

加载它
Type: variant
Subtag: ekavsk
Description: Serbian with Ekavian pronunciation
Prefix: sr
Prefix: sr-Latn
Prefix: sr-Cyrl
Added: 2013-12-02

并命名文件Locale('sr-Cyrl', 'RS') ,但由于日志消息sr-Cyrl_rs.json而崩溃

我想念什么?

1 个答案:

答案 0 :(得分:0)

就其价值而言,不确定您是否设法解决了该问题,但对于任何寻找此问题的人,我设法像这样解决了问题。

请务必按照此处的说明进行操作:https://flutter.dev/docs/development/accessibility-and-localization/internationalization

对于塞尔维亚西里尔文和拉丁文,我的设置是这样的:

app_en.arb
app_sr_Cyrl.arb
app_sr_Latn.arb
app_sr.arb <- fall-back language that is needed

现在当第一次编译这个 get 时,它会为塞尔维亚语生成一个文件:app_localization_sr.dart,如果你在 build 目录中查看该文件,你会发现它基本上在不同的脚本类型。

现在棘手的部分是弄清楚如何“加载”正确的。因为我想先加载 Cyrillic 的,所以对于 Material App,我使用了以下代码:

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Title',
      locale: Locale.fromSubtags(languageCode: 'sr', scriptCode: 'Cyrl'),
      localizationsDelegates: AppLocalizations.localizationsDelegates,
      supportedLocales: AppLocalizations.supportedLocales,
      home: Container(),
    );
  }
}
相关问题