ورود

View Full Version : چطوری تو لینوکس با C برنامه‌نویسی فارسی کنیم؟ کمک!!!!!



amir_saniyan
چهارشنبه 25 مهر 1386, 23:42 عصر
سلام....
یک نفر بیاد به راهنمایی کنه چطور می‌شه تو لینوکس با زبان برنامه نویسی C برنامه‌های فارسی نوشت؟

مثلا تو ویندوز اینطوریه:


; TCHAR myChar
;('س')myChar = _T

امیدوارم کدها رو درست ببینید...
به هر حال تو VC اگه UNICODE رو تعریف کنی اونوقت TCHAR می‌تونه هر کاراکتر یونی‌کدی رو نگه داره و وابسته به locale هم نیست.


حالا لطفا یک نفر بیاد از صفر برای ما توضیح بده تو لینوکس برای فارسی نویسی چی کار می‌کنند. (نمی‌دونم شاید مثلا استفاده از ویژگی‌های UTF8 باشه ولی لطفا از صفر صفر توضیح بدید).

لطفا اگه یک جای مناسب‌تری برای این تاپیک سراغ دارید ما رو به اونجا راهنمایی کنید...


با تشکر

rezaTavak
پنج شنبه 26 مهر 1386, 07:11 صبح
توی لینوکس حمایت قوی و کامل از یونیکد و UTF وجود دارد.

من یک تست کوچک کردم درست جواب داد. کافیست کاراکترهای شما utf باشد.

amir_saniyan
پنج شنبه 26 مهر 1386, 10:04 صبح
ممنون از توضیحات‌تون اما می‌شه کامل‌تر توضیح بدید، یعنی اینکه من برای نگهداری متن‌های فارسی داخل رشته‌ها باید از *char استفاده کنم یا *wchar_t؟ من باید سورس C رو با کدوم encoding ذخیره کنم؟ ANSI-1256 یا UTF-8 بدون امضا (تو VC نحوه ذحیره پرونده مهم نیست، چون اگه قراره برنامه یونی کد باشه خودش همه چیز رو به صورت خودکار تشخیص می‌ده.)؟ تازه اگه نحوه نگهداری رشته‌ها UTF-8 باشه مثلا strlen طول رشته "aس" رو چند برمی‌گردونه؟ 2 یا 3؟ (چون تو UTF-8 کاراکتر a طولش یک بایت است و کاراکتر س طولش دو بایت و مثلا حروف چینی طولشون 3 بایت است در حالی که در UTF-16 یا همون یونی‌کد با نحوه ذخیره معمولی همه کاراکترها دو بایتی هستند). تازه نحوه استفاده از ""L چطوریه؟ :(

یک نکته: خدایی این لینوکسی‌ها فقط داد و قال دارند :)، بابا اگه می‌خواهید لینوکس پیشرفت کنه اول باید یه حالی به برنامه‌نویس‌هاش بدید که بتونند به راحتی تو لینوکس برنامه بنویسند. اگه برنامه نویس برنامه‌اش رو تو لینوکس بنویسه کاربر هم مجبوره که از لینوکس استفاده کنه. اصلا یکی از دلایل پیشرفت سیستم عامل ویندوز VB6.0 بود (البته با کمی اغراق :) ). چون هر کسی با VB6.0 تو سیستم عامل ویندوز هر نوع برنامه‌ای رو نوشت و کلی برنامه که فقط تو سیستم عامل ویندوز کار می‌کنه ساحته شد.

کلی این لینوکسی‌ها به ما گفتند ما بهترین و قوی‌ترین ابزارهای برنامه نویسی رو داریم. رفتیم تو لینوکس دیدیم یک QT Designer است که فقط اینترفیس تولید می‌کنه، تازه همون جا هم کامپایل نمی‌کنه باید بری بیرون برنامه یک پنجره shell باز کنی بعد پروژه رو اونجا کامپایل کنی. یکی دیگه از ابزارهاش هم KDevelope بود که فکر کنم یک چیزی تو مایه‌های VC1.0 بود :) .تازه ویرایشگرش هم موقعی که فارسی تایپ می‌کردی قاط می‌زد. خلاصه دمشون گرم یک KWrite (شبیه notepad) باز کردیم و شروع کردیم برنامه نویسی. از طریقshell هم (یک چیزی تو مایه‌های cmd تو ویندوز) برنامه رو کامپایل کردیم. خدایی آخر تکنولوژی این لینوکس :)
حالا درسته که این همه از لینوکس بد گفتیم اما خدایی جواب سوالمون رو بدید.
با تشکر

tux-world
پنج شنبه 26 مهر 1386, 11:00 صبح
با اجازه اساتید !
می تونین از i18n که برای بین الملل سازی زبانها استفاده میشه استفاده کنین لینک زیر رو ببینید
/http://www.gnu.org/software/gettext‬

roze_sepideh
پنج شنبه 26 مهر 1386, 12:15 عصر
یک نکته: خدایی این لینوکسی‌ها فقط داد و قال دارند :)، بابا اگه می‌خواهید لینوکس پیشرفت کنه اول باید یه حالی به برنامه‌نویس‌هاش بدید که بتونند به راحتی تو لینوکس برنامه بنویسند. اگه برنامه نویس برنامه‌اش رو تو لینوکس بنویسه کاربر هم مجبوره که از لینوکس استفاده کنه. اصلا یکی از دلایل پیشرفت سیستم عامل ویندوز VB6.0 بود (البته با کمی اغراق :) ). چون هر کسی با VB6.0 تو سیستم عامل ویندوز هر نوع برنامه‌ای رو نوشت و کلی برنامه که فقط تو سیستم عامل ویندوز کار می‌کنه ساحته شد.


اگر منظورتون از حال دادن ، ابزار کشکی و یلخی برای برنامه نویسان بی سواد هست که میخوان بیسوادی ویندوزشون رو به لینوکس منتقل کنن...شرمنده ایم . اینجا جای Next و Next نیست بعدشم نفهمیدی چیکار کردی!
شما که Shell لینوکس رو با CMD ویندوز یکی میدونید چون هردو BackGround شون مشکی هست...خوب..... هیچی نگم بهتره.

rezaTavak
پنج شنبه 26 مهر 1386, 12:32 عصر
من اینطوری تست کردم که با vi یک فایل c ساختم و در اون کاراکتر فارسی قرار دادم. بعد با printf روی صفحه نمایش چاپ کردم.

اما یک نرم افزار فارسی xfardic هست که گرافیکی است می تونید سورسش را نگاه کنید.


من چون خیلی وقته دیگه سی کار نمیکنم شرمنده نمیتونم زیاد جواب بدم

جاوا کار می کنم. اگر جاوا بود که در هر جا باشه فرقی نداره بر پایه یونیکد است.



توی همون kwrite هم میشه unicode نوشت. حتی با vi که گرافیکی هم نیست میشه نوشت.

ولی بهتره از gtk استفاده کنید تا qt.


و به فکر IDE هم نباشید چون اساس لینوکس بر gcc است و باید با configure و make و... کار کند نه گرافیکی.


اگر هم می خواهید IDE مثل ویندوز داشته باشید monodevelop هست که بر اساس .net است. اما باید روی کامپیوتری که نرم افزار شما اجرا میشه mono هم باشد.



در کل فکر نکنم زیاد هم سخت باشد. چون اساس لینوکس یونیکد است.

amir_saniyan
پنج شنبه 26 مهر 1386, 13:54 عصر
اگر منظورتون از حال دادن ، ابزار کشکی و یلخی برای برنامه نویسان بی سواد هست که میخوان بیسوادی ویندوزشون رو به لینوکس منتقل کنن...شرمنده ایم . اینجا جای Next و Next نیست بعدشم نفهمیدی چیکار کردی!
شما که Shell لینوکس رو با CMD ویندوز یکی میدونید چون هردو BackGround شون مشکی هست...خوب..... هیچی نگم بهتره.
ما که ادعای سواد نکردیم. ولی امیدوارم کسایی از لینوکس دفاع کنند یا خودشون مستقیما در توسعه و برنامه نویسی لینوکس نقش داشتند و یا حداقل چند خط توش برنامه نوشته باشند و امیدوارم شما هم از همین دسته باشید. وگرنه ادعا و تعصب کور چه به لینوکس، چه به ویندوز و یا هر چیز دیگه چه سودی داره؟

آقای rezaTavak (http://barnamenevis.org/forum/member.php?u=4795) از پاسخ‌هاتون ممنونم. من هم آنچنان نیازی به IDE ندارم تغییر زبان هم همیشه راه حل صحیحی نیست به خصوص که جاوا نسبت به C کندتره. عمده مشکلات من همون نحوه نگهداری رشته‌های فارسی داخل متغیرهاست (که در پست دوم ذکر کردم). به هر حال از شما خیلی متشکرم.


ممنون از توضیحات‌تون اما می‌شه کامل‌تر توضیح بدید، یعنی اینکه من برای نگهداری متن‌های فارسی داخل رشته‌ها باید از *char استفاده کنم یا *wchar_t؟ من باید سورس C رو با کدوم encoding ذخیره کنم؟ ANSI-1256 یا UTF-8 بدون امضا (تو VC نحوه ذحیره پرونده مهم نیست، چون اگه قراره برنامه یونی کد باشه خودش همه چیز رو به صورت خودکار تشخیص می‌ده.)؟ تازه اگه نحوه نگهداری رشته‌ها UTF-8 باشه مثلا strlen طول رشته "aس" رو چند برمی‌گردونه؟ 2 یا 3؟ (چون تو UTF-8 کاراکتر a طولش یک بایت است و کاراکتر س طولش دو بایت و مثلا حروف چینی طولشون 3 بایت است در حالی که در UTF-16 یا همون یونی‌کد با نحوه ذخیره معمولی همه کاراکترها دو بایتی هستند). تازه نحوه استفاده از ""L چطوریه؟ :(

در مورد پاسخ آقای tux-world (http://barnamenevis.org/forum/member.php?u=17548) هم باید بگم تا اونجا که من می‌دونم gettext برای ترجمه رشته‌هاست ولی مشکل من درک خود رشته و پردازش رشته‌هاست (مثلا همون محاسبه طول رشته). از شما هم ممنونم.

hamid206
پنج شنبه 26 مهر 1386, 15:22 عصر
سلام
شما یکم تو گوگل بگرد همه چی پیدا میشه
http://www.linux.com/base/ldp/howto/Unicode-HOWTO-6.html...

hamid206
جمعه 27 مهر 1386, 22:21 عصر
سلام
اقا امیر اگه دقیق بگید برنامه شما می خواهد چه کاری را انجام بده من فکر کنم می تونم به شما کمک کنم من تو technotux هم یه تابع معرفی کردم به شما g_convert اگه همون برنامه ای که اونجا توضیح داده باشید می خواهید بنویسید این تابع کار شما رو راه می ندازه
ولی خوب تو محیط ترمینال فارسی برعکس و حروف جدا جدا نمایش داده می شه ولی خوب اگه خروجی شما یه فایل متنی باشه فکر نکنم مشکلی باشه در مورد QT هم ولش کن بیا سمت GTK اموزش فارسی هم خواستی بیا تو سایت www.gtk.ir من اونجا در خدمتت هستم ...