![]() |
|
تطبيق متعدد اللغات باستخدام Resources - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : دروس دورة دلفي للعرب (https://delphi4arab.net/forum/forumdisplay.php?fid=9) +--- الموضوع : تطبيق متعدد اللغات باستخدام Resources (/showthread.php?tid=2303) الصفحات:
1
2
|
تطبيق متعدد اللغات باستخدام Resources - kachwahed - 15-08-2010 بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله في هذا الدرس مثال بسيط حول استخدام مصادر التطبيق (Resources) لتغيير لغة الواجهة حسب الإعدادات الإقليمية للنظام بشكل تلقائي. String Table: يمكن باستخدام أي محرر Resource تخزين عدة جداول من النصوص تسمى StringTable حيث يحمل كل جدول رقم تعريفي للغة ورقم تعريفي لإقليم اللغة. مثال: في هذا المثال نقوم بإنشاء جدولين من النصوص بشكل يدوي (دون استخدام برامج) حيث في الجدول الأول نخزن النصوص باللغة العربية (إقليم سورية) وفي الجدول الثاني نخزن النصوص بلغة أجنبية (الفرنسية إقليم قياسي) افتح ملف نصي واكتب فيه: كود : // --------- resources of type String -----------
STRINGTABLE
LANGUAGE LANG_ARABIC, SUBLANG_ARABIC_SYRIA
{
1001, "موافق"
1002, "إلغاء الأمر"
1003, "لغات:"
1004, "تطبيق متعدد اللغات"
1005, "حول التطبيق"
}
STRINGTABLE
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
{
1001, "&oK"
1002, "&Annuler"
1003, "Langues:"
1004, "Multi-langue avec Resources"
1005, "&A Propos..."
}
// --------- resources of type Icon -----------
MAINICON Icon "MAINICON.ico"SUBLANG_ARABIC_LIBYA، SUBLANG_ARABIC_EGYPT والجدول الثاني للغة الفرنسية-افتراضي، وكان من الممكن استخدام أي من القيم: SUBLANG_FRENCH أو SUBLANG_FRENCH_CANADIAN... أوغيرها كل هذه القيم وغيرها متوفرة كثوابت في المكتبة Windows.pas. الآن احفظ الملف باسم Lang.rc مثلا. قم بإنتاج ملف Resource من خلال سطر الأوامر: كود : BRCC32 Lang.rcنغير اسم ملف الـ Resource في التطبيق: كود : uses
Forms,
uMain in 'uMain.pas' {Form1};
[color=Red]{$R Lang.res}[/color]
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);الآن تطبيقنا يحتوي على مصادر نصية للغتين لاستدعاء نص الزر OK نكتب: كود : btOk.Caption:= LoadStr(1001);ملاحظة: LoadStr من SysUtils وهي تستدعي LoadString من API بما يشبه الآتي: كود : function GetResString(uID: Cardinal): string;
begin
SetLength(Result , MAX_PATH);
LoadString(HInstance, uID, PChar(Result), MAX_PATH);
end;بعبارة أخرى كيف نعرف أن البرنامج سيستدعي كلمة "موافق" أو "OK"؟؟؟ ... هنا مربط الفرس! البرنامج لا يعرف ذلك وليس بحاجة لمعرفة ذلك... عند تشغيل البرنامج في Thread يحصل هذا الأخير على قيمة Cardinal تدعى Locale تمثل هذه القيمة الإعدادات الإقليمية المطبقة في هذا الـ Thread للحصول على هذه القيمة نستخدم GetThreadLocale تابع API لنشاهد هذه القيمة: كود : ShowMessage(IntToHex(GetThreadLocale, 8));مرر هذه القيمة لهذا التابع لنشاهد الصورة بوضوح: كود : function GetLanguage(wLang: Cardinal): string;
var
szLang: array[0..MAX_PATH] of Char;
begin
VerLanguageName(wLang, szLang, 50);
Result := szLang;
end;يقوم التطبيق عند إقلاعه بقراءة مصادره (الـ Resources) وفق هذه القيمة (Locale) التي تمثل اللغة الإقليمية المحددة. الآن إقرأ عائد التابع GetSystemDefaultLCID باستخدام GetLanguage التي رأيناها آنفا. هذا التابع يعيد اللغة الإقليمية للنظام. وهو اللغة التي تستخدم لفك ترميز Unicode (موجودة في الإعدادات الإقليمية التبويب الثالث في XP). الخلاصة: نكتب تابع يقوم بتطبيق لغة ممررة عبرة معلمة إلى الـ Thread الحالي للتطبيق، ثم يغير نصوص المكونات: PHP كود : procedure TForm1.SetLanguage(LangID: Cardinal);لتطبيق أية لغة: PHP كود : SetLanguage(LangID); PHP كود : function MAKELANGID(usPrimaryLanguage, usSubLanguage: LANGID): WORD;PHP كود : SetThreadLocale(MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_SYRIA)); PHP كود : procedure TForm1.FormCreate(Sender: TObject);سورس المثال مرفق في المشاركة #4 (غير لغة الإقليم في الملف Lang.rc حسب إعدادات جهازك). إستفسارات،ملاحظات، إنتقادات، إضافات أو تعديلات، اقتراحات، مظاهرات، مفاوضات، إنقلابات... مرحبا
تطبيق متعدد اللغات باستخدام Resources - shagrouni - 15-08-2010 السلام عليكم درس رائع أخي kachwahed لأن الإعدادات لدي لا تشمل سوريا اضطررت لتغيير محددات اللغة العربية إلى التالي PHP كود : LANGUAGE LANG_ARABIC, SUBLANG_DEFAULT تنبيه: في السورس المرفق يوجد ملف CompileRes.bat يتم تشغيله كلما أردنا توليد ملف ريسورس. تطبيق متعدد اللغات باستخدام Resources - kachwahed - 15-08-2010 تستخدم SUBLANG_DEFAULT مع اللغات التي ليس لها SubLanguage في حالتنا SUBLANG_DEFAULT تعيد نتيجة SUBLANG_ARABIC_SAUDI_ARABIA لهما نفس القيمة: كود : SUBLANG_ARABIC_SAUDI_ARABIA = $01; { Arabic (Saudi Arabia) }
SUBLANG_DEFAULT = $01; { user default }كود : http://msdn.microsoft.com/en-us/library/dd318693%28v=VS.85%29.aspxتطبيق متعدد اللغات باستخدام Resources - kachwahed - 21-08-2010 السلام عليكم... الآن، لنجعل الأمور تتم بشكل أكثر ديناميكية نضيف تابع API آخر لقراءة جداول النصوص StringTable من Resources ثم إضافتها إلى TComboBox التابع EnumResourceNames يقوم بقراءة محتويات Resources من أجل نمط محدد (هو RT_STRING في مثالنا) ويرسلها إلى تابع آخر (CallBack Function) ليقوم هذا الأخير (وهو تابع API آخر EnumResourceLanguages) بتولي مهمة البحث عن اللغات المستخدمة وإضافتها إلى TComboBox بهذا الشكل: PHP كود : //Enumerate LanguagesID from resources...التابع GetLanguage نفسه الذي رأينا سابقا. الآن نقوم بتحديد اللغة بهذا الشكل: كود : with cbxLang do SetLanguage(Word(Items.Objects[ItemIndex]));إقتباس :تنبيه: في السورس المرفق يوجد ملف CompileRes.bat يتم تشغيله كلما أردنا توليد ملف ريسورس.لا حاجة لذلك الآن ![]() المثال مرفق. تطبيق متعدد اللغات باستخدام Resources - kachwahed - 30-09-2010 إقتباس :باستخدام Macro يدعى MAKELANGID يترجم بدلفي كما يلي:في إصدار Delphi XE تم إضافة جميع الـMacros في المكتبة Windows.pas PHP كود : // #define MAKELANGID(p, s) ((((WORD )(s)) << 10) | (WORD )(p))تطبيق متعدد اللغات باستخدام Resources - cargem - 08-05-2011 كود : http://shup.com/Shup/505145/picture0007.pngهذا لا تنجح تطبيق متعدد اللغات باستخدام Resources - kachwahed - 11-05-2011 إقتباس :ما المشكله مع اليابانية؟انتبه للمسار قد يكون السبب ابتعد عن المسارات الطويلة، والتي تستخدم حروف غير ansi تطبيق متعدد اللغات باستخدام Resources - cargem - 13-05-2011 PHP كود : // --------- resources of type string -----------انا من مدة ابحث عن كمبوننت تفي بالغرض هذه TsiLang Components Suite 6.5 تطبيق متعدد اللغات باستخدام Resources - cargem - 13-05-2011 استخدم Encoding Encode in UTF-8 هذه الطريقة يمكنك كتابة وحفظ اي لغة ولكن كيف لدلفي بتعامل معها؟ تطبيق متعدد اللغات باستخدام Resources - kachwahed - 14-05-2011 مترجم المصادر في دلفي (brcc32.exe) لا يدعم ملفات Unicode كما هو الحال لمترجم Microsoft كود : http://msdn.microsoft.com/en-us/library/8caac1dw%28v=vs.80%29.aspxمع استخدام المعلمات m- و c- لتحديد لغة التحويل انظر: كود : https://forums.embarcadero.com/thread.jspa;jsessionid=7E3131266857184E4D140FB0984DA65F?messageID=103813 |