如何使用 Intl 在 Flutter 中获取当前语言环境文本方向
How to get the current locale text direction in Flutter using Intl
我正在创建一个新的 flutter UI 组件,其中包含 selection 并获取有关该产品的更多信息。
我希望此组件也支持 RTL,因此我需要获取当前语言环境的语言方向,这将使我知道 selection 形状的哪些角将变圆。
LTR
形码是这样的
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(35),
topLeft: Radius.circular(35),
),
)
RTL
形码会像
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomRight: Radius.circular(35),
topRight: Radius.circular(35),
),
)
我知道 intl 提供了获取特定文本方向的功能,而我想获取当前 select 语言环境的默认方向,所以如果当前语言环境是阿拉伯语、波斯语或任何其他权利左语言我将 return RLT
组件。我不知道具体怎么做。
您可以直接使用 intl.Bidi.isRtlLanguage()
和 import 'package:intl/intl.dart' as intl;
在此函数中,如果您不传递 en
或 ar
等语言代码,它将使用 Intl.getCurrentLocale()
来自 bidi_util.dart
的代码片段
static bool isRtlLanguage([String languageString]) {
var language = languageString ?? Intl.getCurrentLocale();
if (_lastLocaleCheckedForRtl != language) {
_lastLocaleCheckedForRtl = language;
_lastRtlCheck = _rtlLocaleRegex.hasMatch(language);
}
return _lastRtlCheck;
}
感谢@chunhunghan 我创建了一个静态方法,该方法根据应用程序的当前区域设置获取上下文和 returns true,因为如果您不传递语言代码,函数总是 returns 错误。
import 'package:intl/intl.dart' as intl;
static bool isDirectionRTL(BuildContext context){
return intl.Bidi.isRtlLanguage( Localizations.localeOf(context).languageCode);
}
Directionality.of(context) == TextDirection.rtl
我正在创建一个新的 flutter UI 组件,其中包含 selection 并获取有关该产品的更多信息。
我希望此组件也支持 RTL,因此我需要获取当前语言环境的语言方向,这将使我知道 selection 形状的哪些角将变圆。
LTR
形码是这样的
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(35),
topLeft: Radius.circular(35),
),
)
RTL
形码会像
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomRight: Radius.circular(35),
topRight: Radius.circular(35),
),
)
我知道 intl 提供了获取特定文本方向的功能,而我想获取当前 select 语言环境的默认方向,所以如果当前语言环境是阿拉伯语、波斯语或任何其他权利左语言我将 return RLT
组件。我不知道具体怎么做。
您可以直接使用 intl.Bidi.isRtlLanguage()
和 import 'package:intl/intl.dart' as intl;
在此函数中,如果您不传递 en
或 ar
等语言代码,它将使用 Intl.getCurrentLocale()
来自 bidi_util.dart
static bool isRtlLanguage([String languageString]) {
var language = languageString ?? Intl.getCurrentLocale();
if (_lastLocaleCheckedForRtl != language) {
_lastLocaleCheckedForRtl = language;
_lastRtlCheck = _rtlLocaleRegex.hasMatch(language);
}
return _lastRtlCheck;
}
感谢@chunhunghan 我创建了一个静态方法,该方法根据应用程序的当前区域设置获取上下文和 returns true,因为如果您不传递语言代码,函数总是 returns 错误。
import 'package:intl/intl.dart' as intl;
static bool isDirectionRTL(BuildContext context){
return intl.Bidi.isRtlLanguage( Localizations.localeOf(context).languageCode);
}
Directionality.of(context) == TextDirection.rtl