معرفی گنو/لینوکس در جلسه آموزشی ادارات دولتی تهران

بلاگ
Linux

فهرست مطالب

 


مقدمه

امروزه بسیاری از سایت های اینترنتی و نرم افزارهای رو میزی باید از زبان ها و فرهنگ های مختلف پشتیبانی کنند. اما از آنجایی که عموما تولید کنندگان نرم افزارهای پایه ، مانند سیستم های عامل و نویسندگان ابزارهای توسعه ، شناختی نسبت به سایر زبان های دنیا ندارند ، مشکلاتی در این خصوص گریبانگیر جامعه نرم افزاری اعم از مصرف کنندگان و تولید کنندگان شده است.


درک مفاهیم بین المللی سازی و محلی سازی و تفاوت این دو با یکدیگر

بین المللی سازی Internationalization (که گاهی به صورت i18n خلاصه می شود) کار اصلی برای ساخت یک سیستم به طریقی است که بتواند با مناطق مختلف سازگار شود. یک برنامه یا سایت بین المللی سازی شده نیاز به دور اندیشی و پیش طراحی دقیق دارد : ساخت برنامه ای برای بازار بین الملل کار ساده ای نیست ، ولی بسیار سخت تر ، سازگار کردن آن ، با زبان ها ، ملیت ها و فرهنگ های دیگر در حالی است که ، طراح اصلی تنها درباره استفاده ، انگلیسی زبان ها ، فکر می کند. محلی سازی ، سازگار کردن یک سیستم برای منطقه ای به خصوص است. اگر یک طرح جامع و کافی برای موضوع بین المللی سازی داشته باشیم ، محلی سازی نسبتا ساده خواهد شد.

در واقع شخصی که متخصص ترجمه از زبانی به زبان دیگر است ، ممکن است چیز زیادی درباره بین المللی سازی یک سیستم به منظور تسهیل محلی سازی آن نداند ، و بلعکس ، متخصص بین المللی سازی نیز ممکن است چیز زیادی درباره محلی سازی یک زبان یا فرهنگ ویژه نداند.

محلی سازی فقط درباره زبان نیست

در واقع بیشتر مردم وقتی درباره محلی سازی فکر می کنند ، اولین چیزی که به ذهنشان خطور می کند ترجمه است. البته ترجمه بخش مهمی از محلی سازی است ، اما بسیاری از موضوعات محلی سازی بین کشورهایی مطرح می شوند که زبان مشترک دارند.

فرض می کنیم در دنیا همه به زبان انگلیسی صحبت می کنند :

  1. واحد های پولی متفاوتی وجود دارد (دلار آمریکا ، پوند انگلیس ، دلار کانادا ، دلار استرالیا و ... ).
  2. تاریخ ها به صورت های متفاوت نوشته می شوند (1/12/2002 means January 12 in the US, but December 1 in the UK).
  3. در بعضی مناطق ترجیح می دهند از 24 ساعت به جای قید am و pm استفاده کنند.
  4. حتی سایز کاغذی که در کشورهای مختلف استفاده می شود متفاوت است.

حتی اگر بخواهیم یک نرم افزار غلط یاب املایی (spell-checker ) یا email صوتی (voice-mail system ) تولید کنیم، با تفاوت بین نحوه نوشتن و تلفظ لغات در مناطق مختلف مواجه می شویم.

  1. کدام شکل نوشتن لغت صحیح محسوب می شود؟ ("grey"،"gray"،"color","colour").
  2. کدام لهجه برای صدای ضبط شده قابل پذیرش است؟
  3. آیا اولویتی برای استفاده از صدای زن یا مرد برای صداهای ضبظ شده وجود دارد؟

موضوع به اینجا ختم نمی شود چون حتی اعداد نیز به صورت های مختلفی نوشته می شوند.انگلیسی زبان ها به طور کلی از ویرگول برای جدا کردن هزارگان و نقطه برای اعشار استفاده می کنند اما در بیشتر کشورهای اروپایی این کار به شکل دیگری صورت می گیرد.

درباره اسامی!

حتی چیز به ظاهر ساده ای مثل نام افراد ، تبدیل به مسئله در یک سیستم بین المللی می شود. در بسیاری از کشورهای اروپایی افراد علاوه بر نام و نام خانوادگی اسم میانی هم دارند. (Name + Middle Initial + Last Name ) ، در اسپانیایی بعضی مواقع نام فامیل قبل از نام میاد و یا بیشتر افراد نام فامیلی مادری خود را نیز در نام کاملشان قید می کنند. (e.g. Gabriel García Marquez's surname is "García" "Marquez" is his mother's maiden name ).

هر وقت بخواهیم سیستمی را بین المللی کنیم ، نیاز به درک جنبه هایی از این قبیل درباره فرهنگ هایی که می خواهیم از سیستممان استفاده کنند داریم.  این قبیل دانسته ها فقط می تواند از طریق یک شخص محلی یا کسی که به طور ویژه روی فرهنگ یا زبانی خاص مطالعه کرده بدست آید.

تجارت الکترونیک جهانی

طراحی سیستمی جهانی برای تجارت الکترونیکی نیز ، نیاز به دانسته های پیچیده ای مثل قوانین مالیات ، قوانین گمرکی ، قوانین حقوق مصرف کنندگان و ... دارد.

 به عنوان مثال ساخت یک نرم افزار حساب داری برای بازار جهانی نیاز به مدتها تحقیق و بررسی نیاز دارد. نرخ تورم ، نرخ ارز ، قوانین مالیاتی که در بعضی کشورها مثل کشور ما مدام در حال تغییرند تنها گوشه ای از موضوعات مورد تحقیق هستند. حالا محلی کردن نرم افزاری که برای نیاز های کشوری خاص طراحی شده همانطور که می بینید نیاز به تغییرات پایه ای دارد. در خیلی از کشور ها در نرم افزارهای حسابداری چیزی به نام تورم متغییر وجود ندارد ، در حالی که برنامه نویسان ایران و برخی دیگر از کشورها باید قسمتی ویژه برای کنترل این پارامتر متغییر ، برای محاسبه درست در نظر بگیرند.

موارد بسیار زیادی برای ذکر کردن وجود دارد که از حوصله خارج است و همه بستگی به نوع تجارت شما دارد.


مشخصات زبان فارسی

کاراکترهای فارسی

حروف فارسی دارای مختصات منحصر به فردی هستند که مدتها از معضلات طراحی نرم افزارهای فارسی بود. همانطور که می دانید ما 32 حرف فارسی داریم. اما در کامپیوتر تعداد کاراکترهای فارسی حداقل سه برابر این مقدار است! خیلی ساده بخواهیم حساب کنیم مثلا حرف ب دارای چهار حالت اول ، وسط ، آخر و جدا است که هر کدام باید جداگانه تعریف شوند. البته کاراکتر های ویژه مانند اعراب ، تشدید ، علامت مد و ... را نیز باید اضافه کرد.

جدا اول وسط آخر
     
   

جهت زبان فارسی

جهت زبان فارسی از راست به چپ است ، و خود این خصیصه می شود گفت یک معضل در فارسی کردن نرم افزارها به حساب می آید. اکثر نرم افزارهای موجود از پایه چپ به راست طراحی شده اند و تغییر جهت اجزا برنامه نیازمند تغییر در قسمت های پایه ای برنامه مانند Component ها نیز هست. طبیعتا تولید کنندگان اصلی در صورت مقرون به صرفه نبودن هرگز اقدام به تغییر دادن Component های پایه خود نخواهند کرد. از اونجایی که تعداد این ابزارهای پایه بسیار زیاد است ، و بعضا هر گروهی ابزارهای خاص خود را نیز توسعه می دهد و این کار محلی سازی را برای برنامه نویسان سخت می کند.

نیاز به پردازش ، بر خلاف سایر زبان ها

همانطور که می دانید زبان فارسی بر خلاف بسیاری از زبان های دنیا دارای حروف جداگانه نیست.  زمانی که این حروف در کنار هم قرار می گیرند ، بسته به موقعیتشان دچار تغییر می شوند. به عنوان مثال اگر بعد حرف ب ، ا قرار بگیرد. حرف ب از حالت جدا به ب اول تغییر می کند.

به همین خاطر کلیه متون فارسی موقع تایپ شدن نیاز به پردازش دارند تا به شکل صحیح خود نمایش داده شوند. ل ی ن و ک س -> لینوکس

مرتب سازی عبارات فارسی

در حدود 10 ، 12 سال قبل اکثر برنامه نویسان ، متون فارسی را به صورت پردازش شده ذخیره می کردند تا از پردازش های تکراری پرهیز کنند ، اما این مسئله باعث می شود تا مرتب سازی عبارات فارسی و حتی جستجو بین عبارات فارسی با مشکل مواجه شود. به عنوان مثال اگر کسی لغاتی که با حرف ب شروع می شدند را در یک بانک اطلاعاتی جستجو می کرد ، هیچ نتیجه ای غیر از حرف ب جدا بدست نمی آورد! این به این علت بود که کامپیوتر بین حرف ب اول ، ب جدا ، ب وسط و ب آخر تفاوت قائل می شد.

متاسفانه در آن موقع راه حلی برای این مشکل نبود ، چون اگر متون به صورت پردازش نشده ذخیره می شدند تنها در همان برنامه قابل مشاهده بودند. که این مسئله برای فایل های متنی اصلا قابل قبول نیست. به تدریج با آمدن Unicode و باب شدن پردازش متون در زمان نمایش ، این مشکلات حل شد و در حال حاضر واسط گرافیکی بسیاری از سیستم عامل ها مثل Linux کار پردازش متون در زمان نمایش را انجام می دهند و کاربر می تواند مطمئن باشد ، متنی که تایپ می کند در سیستم های دیگر نیز قابل مشاهده است.


مشکلات موجود

نبود یک لغت نامه کامل و آزاد برای ترجمه نرم افزارها

دیگر مورد حائز اهمیت ، بحث ترجمه نرم افزارها است. متاسفانه هماهنگی بین معادل های فارسی بکار برده شده وجود ندارد! در واقع بیشتر سلیقه ای است.این مطلب کاربران را دچار مشکل می کند. اگر منبعی مشترک برای این خصوص در نظر گرفته شده بود ، علاوه بر تسریع در محلی سازی نرم افزارها حتی می شود این امکانات را در اختیار تولید کنندگان اصلی قرار داد تا از زبان فارسی در نسخه های آینده خود نیز پشتیبای کنند.

نبود بانک املایی لغات فارسی آزاد (spell checking)

یکی دیگر از مواردی که در فارسی سازی بسیار مورد نیاز است ، یک بانک املایی لغات فارسی است تا بتوان از آن در نرم افزارهای موجود استفاده کرد.

به عنوان مثال یکی از نرم افزارهای معروف cross platform ، منبع باز و رایگان مدیریت email ، محصول شرکت Mozilla به نام Thunderbird (که از معادل ویندوزیش Outlook خیلی کاملتر هست.) مجهز به یک غلط یاب املایی هم هست از زبان هایی همچون : آفریقایی ، بلغاری ، مائوری (فکر کنم قبیله ای چیزی باشند) ، لیتوانی ، مجارستانی و .... پشتیبانی می کند که نبود نام فارسی در این لیست جای تاسف دارد. http://dictionaries.mozdev.org/installation.html

چه مقدار از نرم افزار باید محلی شود؟!

اینکه چه مقدار از یک نرم افزار منبع باز باید محلی شود ، جای بحث دارد. بسیاری از مواقع ، به خصوص در رابطه با نرم افزارهایی که کاربرد تخصصی مرتبط با جامعه جهانی دارند ، فارسی کردن کل پروژه ، نه ارزش صرف وقت را دارد و نه چندان منطقی به نظر می رسد.

به عنوان مثال ، فارسی کردن پروژه منبع باز نرم افزاری که استفاده کنندگان آن همگی به زبان انگلیسی مسلط هستند و به علت تعاملات بین المللی بیشتر از تقویم میلادی استفاده می کنند ، جز گیج کردن استفاده کنندگان با معادل های نا مانوس فارسی ثمری نخواهد داشت. و بهتر است از منابع موجود ، برای پروژه هایی ضروری تر استفاده شود.

تقویم جلالی

قسمت مهم دیگری که تقریبا اکثر نرم افزارهای بازمتن برای فارسی شدن به آن نیاز دارند ، تقویم جلالی است. این در نرم افزارهای اداری بسیار حائز اهمیت است. خوشبختانه توابع مربوط به تقویم جلالی در چند سال اخیر توسعه پیدا کرده اند و در دسترس اکثر برنامه نویسان قرار دارند ، ولی مشکلی که وجود دارد این است که نرم افزارهای بازمتن کنونی اکثرا مکانیزمی داخلی برای استفاده از تاریخ های مختلف را ندارند (در واقع از این نظر ، بین المللی سازی نشده اند) ، بنابراین نیاز به تغییراتی در جای جای برنامه دارند که کار محلی سازی را کند می کند ، در عین حال این تغییرات باید در نسخه های جدید نرم افزار نیاز مدام اعمال شود.

عدم پشتیبانی از Unicode در برخی از نرم افزارهای منبع باز

از آنجایی که برخی از نرم افزارهای منبع باز از کتابخانه های قدیمی استفاده می کنند و این کتابخانه ها از Unicode پشتیبانی نمی کنند ، امکان فارسی کردن این نرم افزارها مطابق با استاندارد های کنونی و بدون تغییرات بنیادی ، وجود ندارد. البته برخی از آن هایی هم که پشتیبانی می کنند ، بعضا به شکل ظعیفی این پشتیبانی را انجام می دهند ، به طوری که در برخی بخش ها ، فارسی کردن پروژه به کندی صورت می گیرد.

خوشبختانه این مطلب در عین حال که وجود دارد ، ولی عام نیست ، چون به علت به روز بودن تکنولوژی های مبتنی بر Open Source ، هر روز تعداد این قبیل نرم افزارها کمتر می شود و کتابخانه های پایه بیشتری بین المللی سازی می شوند. حتی در برخی از پروژه های منبع باز ، که شهرت جهانی دارند ، گروهی از توسعه دهندگان و مستند سازان ، مستقیما ، مسئول بخش بین المللی سازی هستند.

نبود یک کتابخانه جامع زبان فارسی برای زبان های پر طرفدار برنامه نویسی

همانطور که در قسمت آشنایی با محلی سازی و بین المللی سازی عرض کردم. تولید کنندگان و توسعه دهندگان نرم افزار ها با کمبود منابع در خصوص زبان های مختلف از جمله فارسی مواجه هستند. اگر موارد گفته شده در قسمت های قبل به صورت یک package مستند سازی شده در بیایند و برای زبان های پر طرفداری مثل C ، Java و ... آماده شوند ، می توان مطمئن بود که مشکل فارسی سازی تا حد زیادی حل شده است.


UNICODE & UTF-8

UNICODE

گسترش code page های مختلف برای هر زبانی ، منجر به پیچیدگی زیادی برای نرم افزارهایی شد که می بایستی ، بیش از یک زبان را پشتیبانی می کردند. بنابراین توسعه دهندگان ، استاندارد جهانی Unicode را عرضه کردند. Unicode یک عدد یکتا را بدون توجه به Platform ، برنامه و حتی زبان ،به  هر کاراکتر اختصاص می دهد. به عبارت دیگر ، کل کاراکتر هایی که در دنیا استفاده می شوند را لیست ، و شروع به اختصاص عددی واحد به هر کدام از آن ها می کند (البته کاراکترهای مشترک در زبان های مشابه را نیز یکی می کند)

http://www.unicode.org/unicode/standard/principles.html

UTF-8 چیست؟ و چه ارتباطی با Unicode دارد؟ (Unicode Transformation Formats)

هدف اصلی Unicode ، استفاده از encoding 16 bit ساده ای است که بتواند کد پوینت 65,000 کاراکتر را میسر کند. اما هنوز محدودیت هایی بر سر راه استفاده از این encoding به خصوص در نرم افزارهای Network Base وجود داشت ، که البته هماهنگ کردن این نرم افزارها کار بسیار زیادی را می طلبید.

بنابراین ، سه نوع encoding مختلف برای Unicode ساخته شد که از امکانات عمومی ذخیره سازی کاراکتر ها استفاده می کردند. این encoding ها UTF-32 ، UTF-16 ، UTF-8 نام دارند. همانطور که از نامشان پیداست ، در فرمت UTF-8 ، کاراکترهای Unicode به صورت 8 بیتی رمز می شوند و برای شناسایی هر کاراکتر ، یک بایت یا بیشتر اختصاص پیدا می کند. بهترین نکته درباره این فرمت این هست که از استاندارد ASCII استفاده می کند. بنابراین عبارات انگلیسی و کاراکتر های موجود در استاندارد ASCII بدون رمز گشایی ، در متنی که فرمت UTF-8 را دارد قابل مشاهده هستند. به همین خاطر یکی از فرمت های پر طرفدار Unicode است.

http://www.utf-8.com

http://en.wikipedia.org/wiki/UTF-8


امکانات لازم برای استفاده از این نرم افزارها در ایران

مطلع کردن عموم از پروژهای منبع باز محلی شده که می تواند از طریق سایت های مرجع اینترنتی و حتی رسانه های گروهی صورت پذیرد.
آموزش فارسی برای کار با این نرم افزارها ، که می تواند به صورت CD ها ، مقالات و کلاس های آموزشی (کلاس های آموزشی Tehran LUG) باشد.


از بسترهای مهیا شده کنونی باید استفاده کرد

زمانی که UNICODE به این شکل گسترده مورد پشتیبانی قرار نگرفته بود ، ما علاوه بر نوشتن پردازشگر متون فارسی ، ناچار بودیم حتی فونت های اختصاصی برای زبان فارسی طراحی کنیم. که البته نبود یک استاندارد بین برنامه نویسان باعث شده بود که یک روند تکراری بارها و بارها انجام شود. البته بگذریم از مشکلاتی که با توابع تبدیل تاریخ شمسی بود. این مشکلات حتی در ساخت سایت های اینترنتی نیز به شدت گریبانگیر برنامه نویسان بود و کاربران را نیز با دانلود کردن انواع و اقسام فونت های اختصاصی و ناهمگون با سایر سایت ها کلافه کرده بود.

خلاصه اینکه خیلی از بسترهای مورد نیاز برای بین المللی سازی و محلی سازی حالا فراهم شده. امیدواریم که در دوره اخیر بی توجهی ها و ناهماهنگی های گذشته تکرار نشود.

http://www.unicode.org/

سوالات متداول در مورد بین المللی سازی و محلی سازی درباره موضوعات مختلف حتی زبان ها برنامه نویسی

http://www.i18nfaq.com/

بخش بین المللی سازی یکی از میزکارهای معروف لینوکس به نام KDE

http://i18n.kde.org/

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

http://www.gnome.org/i18n/

سایتی مخصوص محلی سازی پروژه های منبع باز برای چینی زبان ها :

 http://i18n.linux.org.tw/openi18n/index_en.html


 معرفی کتاب

البته این کتاب بیشترین برای تولید نرم افزارهای بین المللی هست ولی قطعا برای محلی سازی نرم افزارهای منبع باز هم مفید است.

Internationalization: Developing Software For Global Markets (Paperback)
Tuoc V. Luong, James S. H. Lok, Tuoc V. Luong, Kevin Driscoll


منابع

http://www.speakeasy.org/~jmabel/intl1.htm

http://en.wikipedia.org/wiki/Bidirectional_script_support

http://en.wikipedia.org/wiki/Internationalization

http://www.debian.org/doc/manuals/intro-i18n/

امتیاز شما: خالی میانگین: 5 (1 رای)