PDA

View Full Version : روشهای ساخت نرم افزارهای چند زبانه ...



Mahmood_M
جمعه 29 مرداد 1389, 02:33 صبح
با سلام ...

برای ساخت یک نرم افزار دو زبانه ( یا چند زبانه ) چه راههایی رو پیشنهاد می کنید ؟
مثلا متنها درون فایلهایی ( مثلا INI ) ذخیره و بعد بازیابی بشن و یا برای هر زبان فرمهای جدا در نظر گرفته بشه و فرمها متناسب با زبان نمایش داده بشن و یا مثلا فرمها درون DLL ذخیره و بعد متناسب با زبان انتخابی از DLL لود بشن و ...

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

منتظر نظرات و تجربیات دوستان هستم ...

tdkhakpur
جمعه 29 مرداد 1389, 03:30 صبح
فرض کنید قصد ساخت نرم افزاری رو داریم که هم باید به زبان انگلیسی و هم فارسی باشه و البته برخی از متونی که در برنامه نمایش داده میشه به صورت تصویر هست و به صورت رشته یا متن نیست ...


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

vcldeveloper
جمعه 29 مرداد 1389, 04:54 صبح
با چه ابزار برنامه نویسی میخواید کار کنید؟
اگر دلفی هست، می تونید از ابزار ترجمه خودش استفاده کنید. اون ابزار امکان تعیین موقعیت جدید برای کنترل ها در هر زبان هم بهتون میده. به این ترتیب می تونید برای هر زبانی که برای برنامه تعریف می کنید، هم متون داخل برنامه و کنترل ها را تغییر بدید، و هم موقعیت قرار گیری کنترل ها برای هر زبان را. البته ابزار ترجمه دلفی به طور خودکار عمل میکنه، یعنی در سیستم کاربر، با توجه به تنظیمات زبان ویندوز، DLL مربوط به همان زبان را بارگزاری میکنه.
اگر نخواستید از این ابزار پیش فرض ترجمه دلفی استفاده کنید، کامپوننت های مختلفی برای این کار برای دلفی وجود دارند که کارایی و قابلیت های بعضی هاشون از ابزار ترجمه پیش فرض دلفی بهتر هست.

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

Felony
جمعه 29 مرداد 1389, 04:57 صبح
من فایلهای ini رو پیشنهاد میکنم ، چون به راحتی میتونید همه تنظیمات ( حتی محل قرار گرفتن کنترل ها و ... ) رو داخل سکشن های مجزا و به ترتیب ذخیره کنید و به راحتی هم قابل بازیابی هستند ، خیلی از نرم افزارها از همین روش استفاده میکنن ، مثلا Smart Install Maker که برای هر زبان یک فایل ini داره یا ... میتونید با راه حل آقای کشاورز هم ترکیبش کنید .

در مورد عکس هم که خودتون میتونید با داشتن متن تولیدش کنید ، منظورم این هست که عکس اولیه رو بدون متن تو برنامه داشته باشید و متن مورد نظر رو بسته به زبان انتخابی کاربر بر روی عکس رسم کنید .

CYCLOPS
شنبه 30 مرداد 1389, 05:01 صبح
اگر از دات نت استفاده میکنید میتونید از Windows Resource Localization Editor استفاده کنید که علاوه بر ترجمه قابلیت تغییر اندازه فونت و مکان کنترل ها و حتی خاصیت های کاربردی دیگه مثل Right To Left رو در اختیارتون میذاره و در نهایت Resource ها رو به صورت DLL بهتون خروجی میده (هر زبان یه DLL) که تو خود دات هم استفاده از این Resource ها بسیار ساده است .
خوبیش به اینه که به عنوان مثال یه مترجم که هیچی از برنامه نویسی هم نمیدونه به راحتی با استفاده از اون میتونه برنامتون رو براتون ترجمه کنه
در مورد عکس هم به نظر من همون طور که آقای تاجیک فرمودند بهترین راه ترسیم متن تصاویر در زمان اجرا و بر اساس زبان انتخابی کاربر هست .

موفق باشید :چشمک:

salehbagheri
شنبه 30 مرداد 1389, 05:32 صبح
چندتا برنامه رو هم دیدم که از فایلهای XML برای ترجمه برنامه هاشون استفاده کرده بودند.

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

ricky22
شنبه 30 مرداد 1389, 08:03 صبح
چندتا برنامه رو هم دیدم که از فایلهای XML برای ترجمه برنامه هاشون استفاده کرده بودند.

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

Mahmood_M
شنبه 30 مرداد 1389, 08:56 صبح
ولی این کار تقریبا اصولی نیست شما در نظر بگیرید شما یک لیبل را با کپشن "مقدار موجودی" داخل فرمتان دارید و به زبان فارسی این کشن را گوشه سمت راست قرار میدید حالا اگر شما بخواهید تنها با تعویض کپشن تنوع زبان را داخل برنامه تان قید کنید به نظرم برنامه یه جورایی با محیط سازگار نیست یعنی باید لیبلها هم به سمت راست انتقال داده شوند تا فارسی یا عربی زبانها که دوست دارند از سمت راست بخوانند با افرادی که کارشان با حروف لاتین هست راحت از برنامه استفاده کنند.
خوب مشکل اصلی هم همین جابجایی ابزارها هست ...

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

من فایلهای ini رو پیشنهاد میکنم ، چون به راحتی میتونید همه تنظیمات ( حتی محل قرار گرفتن کنترل ها و ... ) رو داخل سکشن های مجزا و به ترتیب ذخیره کنید و به راحتی هم قابل بازیابی هستند ، خیلی از نرم افزارها از همین روش استفاده میکنن ، مثلا Smart Install Maker که برای هر زبان یک فایل ini داره یا ... میتونید با راه حل آقای کشاورز هم ترکیبش کنید .

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

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

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

اگر از دات نت استفاده میکنید میتونید از Windows Resource Localization Editor استفاده کنید که علاوه بر ترجمه قابلیت تغییر اندازه فونت و مکان کنترل ها و حتی خاصیت های کاربردی دیگه مثل Right To Left رو در اختیارتون میذاره و در نهایت Resource ها رو به صورت DLL بهتون خروجی میده (هر زبان یه DLL) که تو خود دات هم استفاده از این Resource ها بسیار ساده است .
خوبیش به اینه که به عنوان مثال یه مترجم که هیچی از برنامه نویسی هم نمیدونه به راحتی با استفاده از اون میتونه برنامتون رو براتون ترجمه کنه
در مورد عکس هم به نظر من همون طور که آقای تاجیک فرمودند بهترین راه ترسیم متن تصاویر در زمان اجرا و بر اساس زبان انتخابی کاربر هست .
از Net. استفاده نمی کنم ( از دلفی استفاده می کنم ) در مورد تصاویر هم که مشکل رو گفتم و نمیشه از روش ترسیم متن استفاده کرد

بابت نظرات ممنونم ...

حمیدرضاصادقیان
شنبه 30 مرداد 1389, 09:09 صبح
سلام.برای دلفی هم یک برنامه به نام MUltilizer هست که Inprise اینو پیشنهاد داده بود.و نرم افزار قوی و خوبیه.

tdkhakpur
شنبه 30 مرداد 1389, 15:23 عصر
اگر دلفی هست، می تونید از ابزار ترجمه خودش استفاده کنید. اون ابزار امکان تعیین موقعیت جدید برای کنترل ها در هر زبان هم بهتون میده. به این ترتیب می تونید برای هر زبانی که برای برنامه تعریف می کنید، هم متون داخل برنامه و کنترل ها را تغییر بدید، و هم موقعیت قرار گیری کنترل ها برای هر زبان را. البته ابزار ترجمه دلفی به طور خودکار عمل میکنه، یعنی در سیستم کاربر، با توجه به تنظیمات زبان ویندوز، DLL مربوط به همان زبان را بارگزاری میکنه.

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

حمید محمودی
شنبه 30 مرداد 1389, 16:37 عصر
اگر دلفی هست، می تونید از ابزار ترجمه خودش استفاده کنید. اون ابزار امکان تعیین موقعیت جدید برای کنترل ها در هر زبان هم بهتون میده. به این ترتیب می تونید برای هر زبانی که برای برنامه تعریف می کنید، هم متون داخل برنامه و کنترل ها را تغییر بدید، و هم موقعیت قرار گیری کنترل ها برای هر زبان را. البته ابزار ترجمه دلفی به طور خودکار عمل میکنه، یعنی در سیستم کاربر، با توجه به تنظیمات زبان ویندوز، DLL مربوط به همان زبان را بارگزاری میکنه.

راهی نداره که یه کاری کنیم اینطوری نباشه؟ (یعنی کاربر تصمیم بگیره چطوری باشه، به عنوان مثال زبان پیش فرض فارسی باشه اما کاربر اگه دلش خواست بره توی منوی تنظیمات زبانو انگلیسی کنه. و هر دفه که برنامه لود میشه ایندفه انگلیسی باشه! )



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


چه کامپوننت بهتری براش وجود داره؟؟ راستی فرق همین ابزار پیش فرض دلفی با کامپوننت gnugettext چیه؟ یعنی کدوم بهتره؟

vcldeveloper
یک شنبه 31 مرداد 1389, 02:35 صبح
اگه دم دست یک دمو برای جابجای مکان کنترلها بین دو زبان به فرض لاتین و فارسی دارید ارسال کنید من این گزینه رو اصلا جایی ندیدم که مکان کنترل ها رو بطور خودکار جابجا کنه.
یک دمو ضمیمه کردم.


راهی نداره که یه کاری کنیم اینطوری نباشه؟ (یعنی کاربر تصمیم بگیره چطوری باشه، به عنوان مثال زبان پیش فرض فارسی باشه اما کاربر اگه دلش خواست بره توی منوی تنظیمات زبانو انگلیسی کنه. و هر دفه که برنامه لود میشه ایندفه انگلیسی باشه! )
اون موقع که دلفی 7 کار می کردم، یک بار یک جستجو در این زمینه کردم، و چیز خاصی پیدا نکردم، اما امشب که Help دلفی 2010 را چک کردم، دیدم ظاهرا امکان لود کردن زبان دلخواه در Runtime هم اضافه شده، و براش یک سورس هم خودشون آماده کردند. نمیدونم این امکان دقیقا از چه نسخه ایی اضافه شده. در دمویی که قرار دادم، قابلیت انتخاب زبان از طریق منو در runtime وجود داره. برای استفاده از این قابلیت باید فایل reint را به لیست uses یونیت مورد نظرتون اضافه کنید، البته این فایل در مسیر کتابخانه دلفی نیست، بلکه در پوشه DelphiWin32\VCLWin32\RichEdit در محل نصب Demoهای دلفی هست (البته در همین سورس دمویی که قرار دادم هم این فایل موجود هست).

فایل ضمیمه شده حاوی سورس کد نمونه و فایل اجرایی برنامه هست.

tdkhakpur
یک شنبه 31 مرداد 1389, 12:54 عصر
یک دمو ضمیمه کردم.


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

morrning
سه شنبه 02 شهریور 1389, 23:52 عصر
پس باید با کپشنها مشکل داشته باشید؟
ولی این کار تقریبا اصولی نیست شما در نظر بگیرید شما یک لیبل را با کپشن "مقدار موجودی" داخل فرمتان دارید و به زبان فارسی این کشن را گوشه سمت راست قرار میدید حالا اگر شما بخواهید تنها با تعویض کپشن تنوع زبان را داخل برنامه تان قید کنید به نظرم برنامه یه جورایی با محیط سازگار نیست یعنی باید لیبلها هم به سمت راست انتقال داده شوند تا فارسی یا عربی زبانها که دوست دارند از سمت راست بخوانند با افرادی که کارشان با حروف لاتین هست راحت از برنامه استفاده کنند.
ولی در مورد اینکه کلمات را کجا قید کنید به نحوه ایجاد کپشنها مربوط میشه و در حالت کلی چه کلمات از نوع تصویر باشد چه از نوع رشته ای باید در مکانی مانند فایل نگهداری شوند اگر مسئله امنیت هم در این بین باشه میتوانید امنیت خواندن داده ها از فایل را هم درش قید کنید.

vb.net که مشکلی با چپ گرد و راستگرد نداره چون با تغییر Right TO Left LAYOUT فرم تمام عناصر روی فرم متناسب با اون تغییر جهت پیدا میکنن