PDA

View Full Version : سوال: تبديل شماره های فارسی به انگليسی



negative60
چهارشنبه 17 تیر 1394, 04:36 صبح
سلام
چطور ميشه شماره های فارسی رو به انگليسی تبديل کرد؟
با توابع toLatin1 و toLocal8Bit تست کردم تبديل صورت نميگيره و شماره ها به صورت علامت سؤال در ميان.
ممنون ميشم اگر راهنمايی بفرماييد


QString sTime = QDateTime::currentDateTime().toString("hh:mm:ss");
qDebug() << "Time now:" << sTime ;

chikar
چهارشنبه 17 تیر 1394, 12:57 عصر
سلام
اینکه اعداد رو به فرمت فارسی یا انگلیسی مشاهده می کنید به خاطر تنظیمات سیستممتون هست، مثلا در ویندوز در بخش region and language و در تب Format ، اگر بر روی Persian قرار داده شود، فرمت زمان در سیستم و برنامه شما، فارسی می شه و اگر بر روی English باشد، در برنامه تون اعداد را لاتین مشاهده می کنید
کلاس و پلاگین آماده برای تاریخ جلالی در کیوت هست ولی من که کلاس یا متدی آماده برای نمایش اعداد به صورت فارسی یا لاتین ندیدم.
و اگر هم که مایلید کلا اعداد رو به شکل مثلا فارسی یا لاتین ببینید، باید یه کدی بنویسید و یونیکد های فارسی یا لاتین رو با هم جایگزین کنید(برای کار با یونیکد می تونید از کلاس های QString، QChar و QByteArray استفاده کنید)(برای مشاهده یونیکد های اعداد لاتین و فارسی هم یه سرچ تو نت بزنید و جدول یونیکد رو مشاهده کنید)

برای تست این مساله هم، به جای استفاده از qDebug از مثلا QLabel استفاده کنید.

negative60
چهارشنبه 17 تیر 1394, 18:53 عصر
سلام
اینکه اعداد رو به فرمت فارسی یا انگلیسی مشاهده می کنید به خاطر تنظیمات سیستممتون هست، مثلا در ویندوز در بخش region and language و در تب Format ، اگر بر روی Persian قرار داده شود، فرمت زمان در سیستم و برنامه شما، فارسی می شه و اگر بر روی English باشد، در برنامه تون اعداد را لاتین مشاهده می کنید
کلاس و پلاگین آماده برای تاریخ جلالی در کیوت هست ولی من که کلاس یا متدی آماده برای نمایش اعداد به صورت فارسی یا لاتین ندیدم.
و اگر هم که مایلید کلا اعداد رو به شکل مثلا فارسی یا لاتین ببینید، باید یه کدی بنویسید و یونیکد های فارسی یا لاتین رو با هم جایگزین کنید(برای کار با یونیکد می تونید از کلاس های QString، QChar و QByteArray استفاده کنید)(برای مشاهده یونیکد های اعداد لاتین و فارسی هم یه سرچ تو نت بزنید و جدول یونیکد رو مشاهده کنید)
برای تست این مساله هم، به جای استفاده از qDebug از مثلا QLabel استفاده کنید.

ممنون ولی اين نکاتی که اشاره کرديد رو ميدونم
وقتی locale و زبان برنامه و فرم انگليسی مشخص شده کيوت ديگه نبايد از زبان ويندوز تبعيت کنه همچنين تابع toLatin1 کارش همينه اما با اعداد همانند حروف رفتار ميکنه و تبديل انجام نميشه, بايد راه حلی در خود کيوت وجود داشته باشه.

chikar
چهارشنبه 17 تیر 1394, 19:38 عصر
ممنون ولی اين نکاتی که اشاره کرديد رو ميدونم
وقتی locale و زبان برنامه و فرم انگليسی مشخص شده کيوت ديگه نبايد از زبان ويندوز تبعيت کنه همچنين تابع toLatin1 کارش همينه اما با اعداد همانند حروف رفتار ميکنه و تبديل انجام نميشه, بايد راه حلی در خود کيوت وجود داشته باشه.
بله راه حل دیگه هم این هست که زبان و کشور رو با کد نویسی ست کنید و از این طریق زبان رو برای استفاده از تاریخ و زمان اضافه کنید، فقط باز هم می گم از qDebug برای تست استفاده نکنید : مثال



QLocale L(QLocale::Persian,QLocale::Iran);
QLocale::setDefault(L);
QTime t = QTime::currentTime();
QString timeString = L.toString(t,"h:m:s ap");
ui->label->setText( timeString);

negative60
چهارشنبه 17 تیر 1394, 21:40 عصر
بله راه حل دیگه هم این هست که زبان و کشور رو با کد نویسی ست کنید و از این طریق زبان رو برای استفاده از تاریخ و زمان اضافه کنید، فقط باز هم می گم از qDebug برای تست استفاده نکنید : مثال



QLocale L(QLocale::Persian,QLocale::Iran);
QLocale::setDefault(L);
QTime t = QTime::currentTime();
QString timeString = L.toString(t,"h:m:s ap");
ui->label->setText( timeString);




ممنون با QLocale به لاتين تبديل شد

QLocale engLocale(QLocale::English, QLocale::UnitedKingdom);
QString sTime = engLocale.toString(QDateTime::currentDateTime(), "hh:mm:ss");
qDebug() << "Time now:" << sTime ;

chikar
چهارشنبه 17 تیر 1394, 22:18 عصر
دلیلی که گفتم از qDebug استفاده نکنید، برای اعداد فارسی بود، مثال زیر رو ببینید، اعداد لاتین به فارسی تبدیل می شن، اما تو qDebug ، فقط علامت سوال نشون داده میشه، حتی اگر به utf8 تبدیل بشن، حال اینکه در QLabel، این اعداد به درستی نمایش داده می شوند، ولی حواسم نبود که شما می خواید لاتین رو نمایش بدید، نه فارسی!!


QLocale lo(QLocale::Persian,QLocale::Iran);
QLocale::setDefault(lo);

QString str= lo.toString(123) ;
qDebug() << "str is:" << str ;//str.toUtf8() ;
ui->label->setText(str);