Flutter波斯语工具插件persian_tools的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter波斯语工具插件persian_tools的使用

简介

Persian tools

一个可以在所有平台使用的波斯语Dart包

License codecov CI/CD Dart Version pub version status All Contributors

功能特性

以下是persian_tools插件的主要功能:

  • 去除序数词后缀:移除数字中的序数词后缀。
  • 添加序数词后缀:给数字添加序数词后缀。
  • 将波斯语单词转换为数字:将波斯语单词表示的数字转换为阿拉伯数字。
  • 将波斯语数字转换为单词:将阿拉伯数字转换为波斯语单词。
  • 在数字中添加和删除分隔符:为数字添加或删除千位分隔符。
  • 波斯语数字与阿拉伯语、英语数字之间的转换:在不同语言的数字之间进行转换。
  • 检查字符串是否包含波斯语:判断字符串中是否包含波斯语字符。
  • 验证伊朗国民身份证:验证伊朗国民身份证的有效性。
  • 通过国民身份证查找城市和省份名称:根据国民身份证获取所在的城市和省份信息。
  • 计算账单:处理账单相关的操作。
  • 验证银行账户IBAN(SHEBA):验证银行账户的IBAN号。
  • 验证ATM卡号:验证ATM卡号的有效性。
  • 验证伊朗电话号码:验证伊朗电话号码的有效性。
  • 通过银行卡号查找银行名称:根据银行卡号获取银行名称。
  • 从车牌获取信息:解析车牌信息。
  • 修复和解码URL:处理带有空白的URL。

使用示例

添加序数词后缀

import 'package:persian_tools/persian_tools.dart';

void main() {
  var number = 'سی سه'; // or سی | شصت | پنجاه دو
  print(addOrdinalSuffix(number)); // 输出:سی سوم | سی اُم | شصتم | پنجاه دوم

  /// 或者使用String扩展方法
  print(number.withOrdinalSuffix); // 输出:... like so
}

去除序数词后缀

import 'package:persian_tools/persian_tools.dart';

void main() {
  var number = 'چهل و سوم'; // سی سوم | سی اُم | شصتم | پنجاه دوم
  print(removeOrdinalSuffix(number)); // 输出:سی | شصت | پنجاه دو

  /// 或者使用String扩展方法
  print(number.withoutOrdinalSuffix); // 输出:... like so
}

将波斯语单词转换为数字

import 'package:persian_tools/persian_tools.dart';

void main() {
  final words = 'سه هزار دویست و دوازده';

  /// 使用 [wordsToNumber] 方法将 [words] 转换为 int 类型的数字
  print(wordsToNumber(words)); // 输出:3212

  /// 使用 [wordsToNumberString] 方法将 [words] 转换为 String 类型的数字
  print(wordsToNumberString(words)); // 输出:'3212' as String

  /// [wordsToNumberString] 还有两个可选参数
  /// 使用 [digit] 可选参数将数字转换为特定本地数字
  /// 使用 [addComma] 在每三位数字间添加逗号
  print(wordsToNumberString(
    words,
    digits: DigitLocale.fa,
    addComma: true,
  )); // 输出:'۳,۲۱۲' as String

  /// 或者你可以轻松地在 String 对象上使用扩展方法
  print(words.convertWordsToNumber()); // 输出:3212

  print(words.convertWordsToNumberString()); // 输出:'3212' as String
}

将波斯语数字转换为单词

import 'package:persian_tools/persian_tools.dart';

void main() {
  final stringDigit = '257,433';
  final intDigit = -128;

  /// 使用 [numberToWordsString] 方法将 [stringDigit] 转换为波斯语
  print(numberToWordsString(stringDigit)); // 输出:'دویست و پنجاه و هفت هزار و چهارصد و سی و سه'

  /// [numberToWordsString] 还有一个可选参数
  /// 默认情况下 [ordinal] 是 [false],[true] 表示输出是序数词
  print(numberToWordsString(stringDigit, ordinal: true)); // 输出:'دویست و پنجاه و هفت هزار و چهارصد و سی و سوم'

  /// 使用 [numberToWordsInt] 方法将 [intDigit] 转换为波斯语
  print(numberToWords(intDigit)); // 输出:'منفی صد و بیست و هشت'

  /// [numberToWordsInt] 也有一个可选参数
  /// 默认情况下 [ordinal] 是 [false],[true] 表示输出是序数词
  print(numberToWords(intDigit, ordinal: true)); // 输出:'منفی صد و بیست و هشتم'

  /// 你也可以在 int 或 String 对象上简单地使用扩展方法
  print(stringDigit.convertNumToWords()); // 输出:'دویست و پنجاه و هفت هزار و چهارصد و سی و سه'

  print(intDigit.convertNumToWords()); // 输出:'منفی صد و بیست و هشت'
}

在数字中添加和删除分隔符

import 'package:persian_tools/persian_tools.dart';

void main() {
  print(addCommas('3333')); // 输出:3,333
  print(addCommas('۸۲۳۳۴۵')); // 输出:823,345

  print(removeCommas('654,562')); // 输出:654562
  print(removeCommas('3,365.255')); // 输出:3365.255

  print('11222'.addComma); // 输出:11,222
  print('4,544.562'.removeComma); // 输出:4544.562
}

波斯语数字与阿拉伯语、英语数字之间的转换

import 'package:persian_tools/persian_tools.dart';

void main() {
  print(convertArToFa('السلام علیکم 14۱۲۳6٤٥')); // 输出:السلام علیکم 14۱۲۳6۴۵
  print(convertArToEn('Persian Tools : 123٥٦٧')); // 输出:Persian Tools : 123567
  print(convertEnToFa('سلام این هارو فارسی کن : 22۲۳۴')); // 输出:سلام این هارو فارسی کن : ۲۲۲۳۴
  print(convertFaToEn('سلام این هارو اینگلیسی کن : 22۲۳۴')); // 输出:سلام این هارو اینگلیسی کن : 22234
}

检查字符串是否包含波斯语

import 'package:persian_tools/persian_tools.dart';

void main() {
  print(isPersian('این یک متن فارسی است؟')); // 输出:true
  print(isPersian('هل هذا نص فارسي؟')); // 输出:false
  print(hasPersian('This text includes فارسی')); // 输出:true
  print(hasPersian('Это персидский س текст?')); // 输出:true
  print(hasPersian('أكد رئيس اللجنة العسكرية الممثلة لحكومة الوفاق أراضي البلاد.')); // 输出:true
}

验证伊朗国民身份证

import 'package:persian_tools/persian_tools.dart';

void main() {
  var nationalID = '0684159414';
  print(verifyIranianNationalId(nationalID)); // 输出:true
  
  /// 国民身份证应包含10位数字,以下验证应返回 false
  nationalID = '00000';
  print(verifyIranianNationalId(nationalID)); // 输出:false

  /// 使用 [String] 类上的扩展方法验证国民身份证
  nationalID = '';
  print(nationalID.isIranianNationalId); // 输出:false
}

通过国民身份证查找城市和省份名称

import 'package:persian_tools/persian_tools.dart';

void main() {
  final place = getPlaceByIranNationalId('0084575948');
  print(place?.city.name); // 输出:تهران مرکزی
  print(place?.province.name); // 输出:تهران

  /// 使用 [String] 类上的扩展方法获取位置信息
  final nationalId = '2110990147';
  print(nationalId.getPlaceNationalId?.city.name); // 输出:گرگان
  print(nationalId.getPlaceNationalId?.province.name); // 输出:گلستان
}

计算账单

import 'package:persian_tools/persian_tools.dart';

void main() {
  var bill = Bill(billId: 9174639504124, paymentId: 12908197, currency: 'rial');
  print(bill.barcode); // 输出:917463950412400012908197
  print(bill.billType); // 输出:برق 
  print(bill.amount); // 输出:129000
  print(bill.isBillValid); // 输出:false
  print(bill.isPaymentIdValid); // 输出:false
  print(bill.isBillIdValid); // 输出:true
  // 返回上述所有 getter 的 Map,与 getter 相同
  print(bill());
}

验证银行账户IBAN(SHEBA)

import 'package:persian_tools/persian_tools.dart';

void main() {
  var sheba = Sheba('IR820540102680020817909002');
  var bank = sheba(); // 返回 BankInformation 对象
  print(bank?.nickname); // 输出:银行昵称
  print(bank?.name); // 输出:银行完整名称
  print(bank?.persianName); // 输出:银行完整波斯语名称
  print(bank?.code); // 输出:银行代码
  // true 表示可以获取账户号,false 表示无法获取
  print(bank?.isAccountNumberAvailable);
  print(bank?.accountNumber); // 输出:简单格式的账户号
  print(bank?.formattedAccountNumber); // 输出:带连字符的账户号
  print(bank?.process);
  print(sheba.isValid); // 输出:true
}

验证ATM卡号

import 'package:persian_tools/persian_tools.dart';

void main() {
  print(validateCardNumber('6219861034529007')); // 输出:true
  print(validateCardNumber('6219861034529007')); // 输出:true
  print(validateCardNumber('0000000000000000')); // 输出:false
  print(validateCardNumber('621986103452900')); // 输出:false
}

验证伊朗电话号码

import 'package:persian_tools/persian_tools.dart';

void main() {
  final phoneNumber = '09022002580';

  // 验证电话号码
  print(phoneNumberValidator(phoneNumber)); // 输出:true

  // 获取电话号码前缀
  print(getPhonePrefix(phoneNumber)); // 输出:902

  // 获取电话号码详情
  final operatorDetail = getPhoneNumberDetail(phoneNumber);
  print(operatorDetail?.name); // 输出:ایرانسل
  print(operatorDetail?.provinces); // 输出:[]
  print(operatorDetail?.base); // 输出:کشوری
  print(operatorDetail?.type); // 输出:SimCartType.both

  /// 你也可以在 [String] 类上使用这些方法作为扩展方法

  // 验证电话号码
  print(phoneNumber.isPhoneNumber); // 输出:true

  // 获取电话号码前缀
  print(phoneNumber.phoneNumberPrefix); // 输出:902

  // 获取电话号码详情
  print(phoneNumber.phoneNumberDetail?.name); // 输出:ایرانسل
}

通过银行卡号查找银行名称

import 'package:persian_tools/persian_tools.dart';

void main() {
  final cardNumber = '6037701689095443';

  final bankInfo = getBankNameFromCardNumber(cardNumber);
  print(bankInfo?.name); // 输出:بانک کشاورزی
  print(bankInfo?.initCode); // 输出:603770

  /// 你也可以在 [String] 类上使用这些方法作为扩展方法

  // 从 String 获取银行信息
  print(cardNumber.bankNameFromCard?.name); // 输出:بانک کشاورزی
}

从车牌获取信息

import 'package:persian_tools/persian_tools.dart';

void main() {
  var motorcyclePlate = Plate(plate: '12345678');
  print(motorcyclePlate.info.type); // 输出:Motorcycle
  print(motorcyclePlate.info.template); // 输出:123-45678
  print(motorcyclePlate.info.province); // 输出:مرکز تهران
  print(motorcyclePlate.info.category); // 输出:null because its type is Motorcycle
  print(motorcyclePlate.isValid); // 输出:true

  // 由于波斯语的原因,你可能会看到错误形式的车牌
  var carPlate = Plate(plate: '12ب14547');
  print(carPlate.info.type); // 输出:Car
  print(carPlate.info.template); // 输出:12{B}145{Iran}47 , B=ب  Iran=ایران
  print(carPlate.info.province); // 输出:مرکزی
  print(carPlate.info.category); // 输出:شخصی
  print(carPlate.isValid); // 输出:true

  // 你也可以使用下面的 String 扩展方法创建 [Plate]
  var motorPlate = '12345678'.createVehiclePlate;
  print(motorPlate.info.type); // 输出:Motorcycle
  print(motorPlate.info.template); // 输出:123-45678
  print(motorPlate.info.province); // 输出:مرکز تهران
  print(motorPlate.info.category); // 输出:null because its type is Motorcycle
  print(motorPlate.isValid); // 输出:true
}

修复和解码URL

import 'package:persian_tools/persian_tools.dart';

void main() {
  var url = 'wss://hostname.domain/?q=i am a wrong query';
  print(urlFix(url)); // 输出:wss://hostname.domain/?q=i%20am%20a%20wrong%20query
}

以上就是 persian_tools 插件的基本使用方法和一些常见的使用场景。希望这些示例能帮助你在Flutter项目中更好地处理波斯语相关的内容。如果你有任何问题或需要更多帮助,请随时查阅官方文档或访问GitHub仓库。


更多关于Flutter波斯语工具插件persian_tools的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter波斯语工具插件persian_tools的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用波斯语工具插件 persian_tools 的示例代码。这个插件提供了一系列用于处理波斯语(Farsi)文本的实用功能,如数字转波斯文、日期格式化等。

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 persian_tools 依赖:

dependencies:
  flutter:
    sdk: flutter
  persian_tools: ^最新版本号  # 请替换为实际的最新版本号

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你需要使用 persian_tools 的 Dart 文件中导入插件:

import 'package:persian_tools/persian_tools.dart';

3. 使用插件功能

3.1 数字转换为波斯文

void main() {
  // 示例数字
  int number = 1234567890;

  // 转换为波斯文数字
  String persianNumber = PersianTools.numberToPersian(number);

  print(persianNumber);  // 输出: ١٢٣٤٥٦٧٨٩٠
}

3.2 波斯文数字转换回阿拉伯数字

void main() {
  // 示例波斯文数字
  String persianNumber = "١٢٣٤٥٦٧٨٩٠";

  // 转换为阿拉伯数字
  int number = PersianTools.persianToNumber(persianNumber);

  print(number);  // 输出: 1234567890
}

3.3 格式化日期为波斯文格式

import 'package:flutter/material.dart';
import 'dart:ui' as ui;
import 'package:jdate/jdate.dart';
import 'package:persian_tools/persian_tools.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('波斯文日期格式化示例'),
        ),
        body: Center(
          child: Text(formatPersianDate()),
        ),
      ),
    );
  }

  String formatPersianDate() {
    // 获取当前日期
    JalaliDate now = JalaliDate.now();

    // 格式化日期为波斯文格式
    return PersianTools.formatDate(now, 'EEEE, d MMMM yyyy');
  }
}

在上面的代码中,我们使用了 jdate 插件来获取和处理波斯历(Jalali)日期。确保你已经在 pubspec.yaml 中添加了 jdate 依赖:

dependencies:
  flutter:
    sdk: flutter
  persian_tools: ^最新版本号
  jdate: ^最新版本号  # 请替换为实际的最新版本号

4. 运行应用

确保你已经完成了上述步骤,然后运行你的 Flutter 应用。你应该能够在界面上看到波斯文格式的日期,并且能够正确地进行数字与波斯文数字的转换。

这个示例展示了如何集成和使用 persian_tools 插件的一些基本功能。你可以查阅插件的官方文档以了解更多高级功能和用法。

回到顶部