gpt4 book ai didi

convert english number with farsi or arabic number in Dart(在Dart中将英语数字转换为波斯语或阿拉伯语数字)

转载 作者:bug小助手 更新时间:2023-10-28 22:32:12 31 4
gpt4 key购买 nike



I'm new in Dart and flutter.

我是飞镖和扑翼的新手。



I want to replace English number with Farsi number.
How can implement this?

我想把英语号码换成波斯语号码。如何实现这一点呢?



1-2-3-4-5-6-7-8-9 ==> ‍‍۱-۲-۳-۴-۵-۶-۷-۸-۹

更多回答
优秀答案推荐

Example:

示例:



String replaceFarsiNumber(String input) {
const english = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
const farsi = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];

for (int i = 0; i < english.length; i++) {
input = input.replaceAll(english[i], farsi[i]);
}

return input;
}

main() {
print(replaceFarsiNumber('0-1-2-3-4-5-6-7-8-9')); // ==> ۰-۱-۲-۳-۴-۵-۶-۷-۸-۹
}


static String ConvertDigitsToLatin(String s) {
var sb = new StringBuffer();
for (int i = 0; i < s.length; i++) {
switch (s[i]) {
//Persian digits
case '\u06f0':
sb.write('0');
break;
case '\u06f1':
sb.write('1');
break;
case '\u06f2':
sb.write('2');
break;
case '\u06f3':
sb.write('3');
break;
case '\u06f4':
sb.write('4');
break;
case '\u06f5':
sb.write('5');
break;
case '\u06f6':
sb.write('6');
break;
case '\u06f7':
sb.write('7');
break;
case '\u06f8':
sb.write('8');
break;
case '\u06f9':
sb.write('9');
break;

//Arabic digits
case '\u0660':
sb.write('0');
break;
case '\u0661':
sb.write('1');
break;
case '\u0662':
sb.write('2');
break;
case '\u0663':
sb.write('3');
break;
case '\u0664':
sb.write('4');
break;
case '\u0665':
sb.write('5');
break;
case '\u0666':
sb.write('6');
break;
case '\u0667':
sb.write('7');
break;
case '\u0668':
sb.write('8');
break;
case '\u0669':
sb.write('9');
break;
default:
sb.write(s[i]);
break;
}
}
return sb.toString();
}


Not sure in what context you're going to use the numbers, but I would rather define a const map:
const numberMap = {0: '۰', 1: '۱', 2:'۲', 3:'۳', 4:'٤', 5:'۵', 6:'٦', 7:'۷', 8:'۸',9: '۹'};
Then you can just call numberMap[number] to reuse it.

不确定您将在什么上下文中使用这些数字,但我更愿意定义一个常量映射:const number Map={0:‘·’,1:‘۱’,2:‘۲’,3:‘۳’,4:‘٤’,5:‘۵’,6:‘٦’,7:‘۷’,8:‘۸’,9:‘۹’};然后只需调用NumerMap[Number]来重用它。



Depending on this answer: https://stackoverflow.com/a/63934087/14409491

取决于以下答案:https://stackoverflow.com/a/63934087/14409491


extension NumberConverter on num {
static const Map<String, String> arabicDigits = <String, String>{
'0': '\u0660',
'1': '\u0661',
'2': '\u0662',
'3': '\u0663',
'4': '\u0664',
'5': '\u0665',
'6': '\u0666',
'7': '\u0667',
'8': '\u0668',
'9': '\u0669',
};

String toArabicDigits() {
final String number = toString();
StringBuffer sb = StringBuffer();
for (int i = 0; i < number.length; i++) {
sb.write(arabicDigits[number[i]] ?? number[i]);
}
return sb.toString();
}
}


Here is my solution:

以下是我的解决方案:


String engNumberToFarsi(String number) {

Map numbers = {
'0' : '۰',
'1' : '۱',
'2' : '۲',
'3' : '۳',
'4' : '۴',
'5' : '۵',
'6' : '۶',
'7' : '۷',
'8' : '۸',
'9' : '۹',
};

numbers.forEach((key, value) => number = number.replaceAll(key, value));

return number;
}


I'm a bit late to the party but here is a solution using RegExp and String.replaceAllMapped(...):

我参加聚会有点晚了,但这里有一个使用RegExp和String.replaceAllMaps(...)的解决方案:


extension ToFarsiNumber on String {
String toFarsi() {
const Map<String, String> numbers = {
'0': '۰',
'1': '۱',
'2': '۲',
'3': '۳',
'4': '۴',
'5': '۵',
'6': '۶',
'7': '۷',
'8': '۸',
'9': '۹',
};

return replaceAllMapped(
RegExp('[0-9]'),
(match) => numbers[this[match.start]]!,
);
}
}

Usage:

用途:


'0-1-2-3-4-5-6-7-8-9'.toFarsi(); // ۰-۱-۲-۳-۴-۵-۶-۷-۸-۹




import 'package:alert_dialog/alert_dialog.dart';
import 'package:flutter/material.dart';

class Home2 extends StatefulWidget {
const Home2({Key? key}) : super(key: key);

@override
State<Home2> createState() => _Home2State();
}

class _Home2State extends State<Home2> {
String TransformerNum = 'محمود 2026';
TextEditingController TransformerNumController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('ArbicNumbers'),),
body: SingleChildScrollView(
child: Column(
children: [
Container(
margin: EdgeInsets.only(top:220,left: 650),
child: Text('${TransformerNum}',style: TextStyle(fontFamily: '(A) Arslan Wessam A', fontSize: 25)),
),
Container(
margin: EdgeInsets.only(top:220,left: 650),
child: ElevatedButton(
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Text('${TransformerNum}',style: TextStyle(fontFamily: '(A) Arslan Wessam A', fontSize: 25)),
SizedBox(width: 10,),
Text('اضف بيانات المحول ',style: TextStyle(fontFamily: '(A) Arslan Wessam A', fontSize: 25)),

],
),
onPressed: () async{
return alert(
context,
title: Column(
children: [

Container(
// margin: EdgeInsets.only(left:200, top: 200, right: 300),
child: TextFormField(
controller: TransformerNumController,
decoration: InputDecoration(
labelText: 'ادخل البيانات',
hintMaxLines: 1,
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(
color: Colors.blue,
)),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(200)),
prefixIcon: const Icon(
Icons.add_circle_outline_outlined,
color: Colors.blue,
),
fillColor: Colors.lightBlue[50],
filled: true,
hintText: '....... مثال 1او 2 او'),

)
),

],
),

textOK: IconButton(onPressed: (){
setState((){
TransformerNum = replaceFarsiNumber(TransformerNumController.text);
//TransformerNum = TransformerNumController.text;
});
Navigator.of(context).pop();
}, icon: Icon(Icons.add_circle))
);
},
),
)
],
),
),
);
}
String replaceFarsiNumber(String input) {
const english = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
const farsi = ['۰', '۱', '۲', '۳', '۴', '۵', '٦', '۷', '۸', '۹'];

for (int i = 0; i < english.length; i++) {
input = input.replaceAll(english[i], farsi[i]);
}

return input;
}
}





@Xavier answer is correct, however I would suggest to define an extension to use instead of each time wrapping your string with function

@Xavier回答是正确的,但是我建议定义一个扩展来使用,而不是每次都用函数包装字符串


extension FarsiNumberExtension on String {
String get farsiNumber {
const english = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
const farsi = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
String text = this;
for (int i = 0; i < english.length; i++) {
text = text.replaceAll(english[i], farsi[i]);
}
return text;
}
}

and use like this

并像这样使用


print('0-1-2-3-4-5-6-7-8-9'.farsiNumber);
print('myNumber123'.farsiNumber);

output

输出


۰-۱-۲-۳-۴-۵-۶-۷-۸-۹
myNumber۱۲۳


I have published the localizeDigits() extension method on String in the package hrk_batteries.

我已经在hrk_batteries包中发布了String上的localizeDigits()扩展方法。


Add the package:

添加程序包:


$ dart pub add hrk_batteries

Use it as follows:

请按如下方式使用它:


localized_digits_example.dart

本地化数字示例.DART


import 'package:hrk_batteries/hrk_batteries.dart';

void main() {
final String enToArLocalizedString = 'A0123456789Z'.localizeDigits(
toZeroDigit: '\u0660', // toZeroDigit: '٠',
);
print(enToArLocalizedString); // A٠١٢٣٤٥٦٧٨٩Z

final String enToFaLocalizedString = 'A0123456789Z'.localizeDigits(
toZeroDigit: '\u06f0', // toZeroDigit: '۰',
);
print(enToFaLocalizedString); // A۰۱۲۳۴۵۶۷۸۹Z
}

更多回答

Worked with me!

和我一起工作!

I think Map must be defined with {} instead []

我认为地图必须用{}来定义,而不是[]

ah sorry my bad. Edited.

啊,对不起,是我的错。编辑过的。

Works on Windows

在Windows上运行

Remember that Stack Overflow isn't just intended to solve the immediate problem, but also to help future readers find solutions to similar problems, which requires understanding the underlying code. This is especially important for members of our community who are beginners, and not familiar with the syntax. Given that, can you edit your answer to include an explanation of what you're doing and why you believe it is the best approach?

请记住,Stack Overflow不仅仅是为了解决眼前的问题,也是为了帮助未来的读者找到类似问题的解决方案,这需要理解底层代码。这对于我们社区的初学者和不熟悉语法的成员来说尤其重要。考虑到这一点,你能编辑你的答案,包括你正在做的事情的解释以及为什么你认为这是最好的方法吗?

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com