在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
而崩溃
我想念什么?
答案 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(),
);
}
}