根据flutter中的语言更改文本方向

问题描述 投票:0回答:4

我有一个笔记应用程序,允许用户输入笔记 我希望如果用户使用的语言是阿拉伯语,则将文本方向设置为 rtl,否则在文本字段和我使用 listTile 的详细信息屏幕中将其设置为 ltr

我该怎么做?

flutter dart
4个回答
1
投票

你可以用这个

https://pub.dev/packages/auto_direction

此包根据提供的文本语言将小部件的方向从 ltr 方向更改为 rtl 方向,反之亦然。


0
投票

来自官方文档

默认情况下,Flutter 仅提供美国英语本地化。要添加对其他语言的支持,应用程序必须指定其他 MaterialApp(或 CupertinoApp)属性,并包含一个名为 flutter_localizations 的包。截至 2020 年 11 月,该软件包支持 78 种语言。

要使用 flutter_localizations,请将包作为依赖项添加到 pubspec.yaml 文件中:

    dependencies:
  flutter:
    sdk: flutter
  flutter_localizations: # Add this line
    sdk: flutter         # Add this line

接下来,运行 pub get packages,然后导入 flutter_localizations 库并为 MaterialApp 指定localizationsDelegates 和supportedLocales:

    import 'package:flutter_localizations/flutter_localizations.dart';
// TODO: uncomment the line below after codegen
// import 'package:flutter_gen/gen_l10n/app_localizations.dart';

// ...

MaterialApp(
 localizationsDelegates: [
   // ... app-specific localization delegate[s] here
   // TODO: uncomment the line below after codegen
   // AppLocalizations.delegate,
   GlobalMaterialLocalizations.delegate,
   GlobalWidgetsLocalizations.delegate,
   GlobalCupertinoLocalizations.delegate,
 ],
 supportedLocales: [
    const Locale('en', ''), // English, no country code
    const Locale('ar', ''), // Arabic, no country code
    const Locale.fromSubtags(languageCode: 'zh'), // Chinese *See Advanced Locales below*
    // ... other locales the app supports
  ],
  // ...
)

引入 flutter_localizations 包并添加上面的代码后,Material 和 Cupertino 包现在应该在 78 个受支持的语言环境之一中正确本地化。小部件应适应本地化消息,

along with correct left-to-right and right-to-left layout
。尝试将目标平台的区域设置切换为阿拉伯语 (ar),并注意消息应本地化,并且小部件的布局应考虑从右到左的布局。


0
投票
dependencies:
  flutter:
    sdk: flutter
  intl: ^0.17.0 # Use the latest version of intl package
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // Get the locale of the device
    Locale deviceLocale = WidgetsBinding.instance!.window.locale;

    // Check if the language code of the locale is Arabic
    bool isArabic = deviceLocale.languageCode == 'ar';

    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Text(
            isArabic ? 'العربية' : 'English',
            textDirection: isArabic ? TextDirection.rtl : TextDirection.ltr,
          ),
        ),
      ),
    );
  }
}

-1
投票

尝试使用 langdetect(如果您使用 tkinter)

from langdetect import detect
from tkinter import *
from tkinter.constants import *

arabictext = "مرحبا"

root = Tk()
text = Text(root)
lang = detect(arabictext)

if lang == "ar":
    text.tag_configure('tag-right', justify='right')
    text.insert('end', arabictext, 'tag-right')
    text.grid()

root.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.