تقوم INTL بعمل قصير في إنشاء برامج متعددة اللغات في Visual FoxPro (VFP). فهو يمنحك القدرة على إنشاء تطبيقات Visual FoxPro متعددة اللغات مع تقليل متاعب إنشاء برامج متعددة الإصدارات.
تعمل هذه الوثيقة على وصف ما يلي:
strings.dbf
MsgSvc()
INTL
cINTLAbstract
cINTLCurrency
cINTLData
cINTLFont
cINTLMemento
cINTLPicture
cINTLRightToLeft
cINTLStrategy
الطبقةcINTLString
config.fpw
MsgSvc()
MsgSvc()
strings.dbf
بناءً على .PJXstrings.dbf
استنادًا إلى .SCXstrings.dbf
بناءً على .VCXstrings.dbf
بناءً على .MNXstrings.dbf
استناداً إلى .FRXINTLVisitor
أولاً، ضع ملفات INTL في دليل جديد نظيف.
ثم،
نشر الملفات: ضع الملفات المتعلقة بمشروعك يدويًا كما هو موضح في كيفية وضع ملفات INTL بشكل صحيح.
تعديل ملف config.fpw
: بالنسبة للقوائم، قم بإضافة السطرين إلى ملف config.fpw
كما هو موضح في كيفية تعريب القوائم.
قم ببناء تعريف فئة النموذج الخاص بك: في الوقت الحالي، وربما إلى الأبد، قم باستدعاء INTL في النماذج باستخدام Form::Init()
التي تستدعي كائن INTL. راجع كيفية الحصول على الترجمة التلقائية للنماذج.
إذا كنت بحاجة إلى الترجمة، فقم بإنشاء مثيل لكائن INTL: الآن عندما تكون الترجمة مطلوبة، قم بإنشاء كائن INTL وتكوينه كما هو موضح في كيفية إنشاء مثيل لكائن INTL.
من المهم أن يقوم VFP بالعثور على ملفات INTL حسب الحاجة. إليك مكان وضع ملفات INTL الخاصة بك بحيث تكون متاحة لبيئة التطوير الخاصة بك:
انشر ملفاتك على النحو التالي:
genmenux.prg
intl.prg
SET PATH
.strings.dbf strings.fpt strings.cdx
SET PATH
.msgsvc.dbf msgsvc.fpt msgsvc.cdx
SET PATH
. قم بإنشاء عضو يسمى _SCREEN.oINTL
للاحتفاظ بمثيل INTL.
من أجل استخدام INTL، يجب أن يقوم تطبيقك بإنشاء مثيل لكائن INTL. هناك العديد من الطرق للقيام بذلك، وأفضلها هو إضافتها إلى _SCREEN
، مثل هذا:
*-- Anywhere, anytime:
*-- Instantiate INTL in _SCREEN
SET PROCEDURE TO INTL ADDITIVE
SCREEN.AddObject( "oINTL", "INTL" )
تعريب النماذج عن طريق تمرير مراجع الكائنات الخاصة بها إلى أسلوب Localize()
لكائن INTL.
تتم ترجمة النماذج (وأي حاوية أخرى) عن طريق تمرير مرجعها إلى الأسلوب oINTL.Localize()
.
*-- Configure oINTL to another language
_SCREEN.oINTL.SetLanguage( "French" )
*-- Instantiate a form. If the form calls INTL in its Init()
*-- method, then the form appears in French....
DO FORM MyForm Name MyForm
.... أو يمكنك توطين النموذج بسرعة.
_SCREEN.oINTL.Localize( MyForm )
قم بإجراء اتصال بـ oINTL
في التسلسل الهرمي Form.Init()
الخاص بك.
لتجعل نماذجك تتوطّن بشكل تلقائي، قم باستدعاء الأسلوب oINTL.Localize()
في التسلسل الهرمي لفئة النموذج الخاص بك. للقيام بذلك، ضع التعليمة البرمجية التالية في أسلوب Init()
لتعريف فئة النموذج الخاص بك. |
*-- Don't forget to call the ParentClass!
DODEFAULT()
IF TYPE("_SCREEN.oINTL" ) == "O"
_SCREEN.oINTL.Localize( This )
ENDIF
يتم استخدام برنامج تشغيل GEMENUUX لتوطين القوائم. لتنشيط GEMENUUX وبرنامج التشغيل INTL.PRG الخاص به، ضع الأسطر التالية في config.fpw
الخاص بك:
أضف هذه السطور إلى config.fpw
.
*-- Configuring for INTL menus.
_GENMENU = GENMENUX.PRG
_MNXDRV2 = INTL.PRG
*-- End of configuration for INTL menus.
تتطلب بعض هذه التغييرات إعادة تشغيل VFP. لتجنب إعادة تشغيل FoxPro في هذا الوقت، قم بإصدار الأمر التالي في نافذة الأوامر:
_GENMENU = HOME()+”GENMENUX.PRG”
هذا هو كل ما تحتاج إلى تغييره في بيئة التطوير لديك لتوطين القوائم. من الآن فصاعدا، قم بإنشاء القوائم كالمعتاد.
جينمينوكس رائع جدًا. تحقق من ذلك.
ملاحظة : لا يحل GEMENUUX محل منشئ القائمة الأصلية لـ VFP. نظرًا لأن GENMENUX يستدعي GENMENU.PRG، فسيتم إنشاء التعليمات البرمجية الخاصة بك بواسطة VFP كالمعتاد. تستخدم مجموعة أدوات INTL GENMENUX كمعالج مسبق. GEMENUX هو برنامج غني. يرجى مراجعة GEMENUX لمزيد من المعلومات حول قدراته.
تحدد بنية strings.dbf
اللغات التي تدعمها.
استخدم طريقة SetLanguage()
لتغيير لغة INTL.
يأتي INTL مع جدول اسمه strings.dbf
والذي يحتوي على مجموعة متنوعة من الحقول، أحدها هو cOriginal
، وقد يحتوي على حقول أخرى للغات مختلفة، على سبيل المثال cFrench
، cGerman
، و cSpanish
، وما إلى ذلك.
يتم تحديد اللغات التي تدعمها من خلال بنية الجدول strings.dbf
. لإضافة لغة جديدة قم بتغيير بنية strings.dbf
.
لتغيير لغة الترجمة الحالية، استخدم طريقة SetLanguage()
. لنفترض أننا نريد أن يكون النموذج باللغة الفرنسية. قم أولاً بتعيين اللغة، ثم قم بترجمة النموذج:
_SCREEN.oINTL.SetLanguage( "French" )
_SCREEN.oINTL.Localize( _SCREEN.ActiveForm )
لا يوجد شيء أفضل من تبديل لغة العرض بسرعة.
لتبديل اللغات سريعًا، وهو ما يعد دائمًا نجاحًا في العرض التوضيحي (افعل ذلك حتى لو لم يكن مطلوبًا - فهو سهل جدًا)، أنشئ آلية في تطبيقك لتكوين كائن INTL باستخدام INTL.SetLanguage()
، كما يتبع.
_SCREEN.oINTL.SetLanguage("German" ) && Configure INTL for German
FOR i = 1 TO ALEN(_SCREEN.Forms ) && Localize active forms
_SCREEN.oINTL.Localize( _SCREEN.Forms[i] )
ENDFOR
DO MAIN.MPR && Refresh the menu too!
لتغيير الشخصية المستندة إلى الإعدادات المحلية لتطبيقك، أقترح عليك استخدام فئة فرعية INTL
للعمل حسب الحاجة. يعد تصنيف INTL
لتلبية احتياجاتك الخاصة طريقة رائعة لتلبية المتطلبات المحلية بأقل قدر من التعليمات البرمجية والضجة.
فيما يلي مثال لفئة فرعية من INTL تناسبني في مجموعة متنوعة من اللغات. نحن نصنف فئة INTL
لتغيير كافة الإعدادات الخاصة بالإعدادات المحلية مرة واحدة.
لاحظ استراتيجية RightToLeft (فئة cINTLRightToLeft
)، والتي تعتبر مفيدة لأنظمة الكتابة في الشرق الأوسط.
DEFINE CLASS MyINTL AS INTL
FUNCTION SetLocale( tcLocale )
IF EMPTY( tcLocale )
tcLocale = this.GetLocale()
ENDIF
IF INTL::SetLocale( @tcLocale )
DO CASE
CASE PROPER(tcLocale )= "Usa"
SET CURRENCY TO "$"
SET CURRENCY LEFT
SET POINT TO "."
SET SEPARATOR TO ","
SET DATE TO American
SET MARK TO "/"
this.SetRightToLeft( .F. )
this.SetConversion( "Usa", 1.33 )
this.SetLanguage( "USEnglish" )
CASE PROPER(tcLocale )= "France"
SET CURRENCY TO " F"
SET CURRENCY RIGHT
SET POINT TO ","
SET SEPARATOR TO "."
SET DATE TO DMY
SET MARK TO "/"
this.SetRightToLeft( .F. )
this.SetConversion( "France", 0.28 )
this.SetLanguage( "French" )
CASE PROPER(tcLocale )= "Germany"
SET CURRENCY TO " DM"
SET CURRENCY RIGHT
SET POINT TO ","
SET SEPARATOR TO "."
SET DATE TO DMY
SET MARK TO "/"
this.SetRightToLeft( .F. )
this.SetConversion( "Germany", 0.28 )
this.SetLanguage( "German" )
CASE PROPER(tcLocale )= "Israel"
SET CURRENCY TO "ILS"
SET CURRENCY LEFT
SET POINT TO "."
SET SEPARATOR TO ","
SET DATE TO British
SET MARK TO "/"
this.SetConversion( "Israel", 0.41 )
this.SetRightToLeft( .T. )
this.SetLanguage( "Hebrew" )
ENDCASE
ENDIF
ENDDEFINE
تم تصميم INTL ليتم تنفيذها بسرعة.
إليك ما يتعين عليك القيام به لتوطين تطبيقك هذا الصباح للحصول على عرض توضيحي متعدد اللغات بعد ظهر هذا اليوم. إذا كنت قد استخدمت أدوات تصميم VFP بشكل صحيح، فهذه مهمة سريعة. إذا لم يكن الأمر كذلك، فسوف يستغرق الأمر وقتًا أطول قليلاً للهندسة.
الخطوات الأساسية هي:
قم بتثبيت INTL وقم بزرع طريقة Init()
للفئات الأساسية للنموذج الخاص بك. اتبع الخطوات الموجودة في القسم الذي يحمل عنوان تثبيت INTL. تأكد من مراجعة جميع الخطوات. من المهم بشكل خاص الخطوات التي تحمل عنوان كيفية إنشاء مثيل لكائن INTL، وكيفية الحصول على التعريب التلقائي للنماذج، وكيفية تعريب القوائم.
قم بتعديل بنية strings.dbf
وأضف حقلاً واحدًا لكل لغة تحتاجها.
strings.dbf
الذي يأتي مع INTL وضعه في الدليل الجذر لمشروعك.ZAP
الجدول strings.dbf
الذي قمت بوضعه في جذر المشروع الخاص بك.MODIFY STRUCTURE
strings.dbf
وإضافة عمود جديد باسم cSwahili
بطول 120. لاحظ أن "c" في cSwahili
مطلوب. اجعل تطبيقك يقوم بإنشاء كائن INTL. في وقت مبكر من تطبيقك، قم بإنشاء مثيل لكائن INTL كما هو موضح في كيفية إنشاء مثيل لكائن INTL. أصبح العرض بلغة مختلفة الآن مسألة استخدام طريقة SetLanguage()
الخاصة به.
قم بعمل "بناء الكل". افتح مشروعك، وحدد "إنشاء"، وقم بإنشاء تطبيق أو Exe، مع التأكد من تحديد "إعادة ترجمة كافة الملفات". اذهب لتناول الغداء.
لتحميل strings.dbf
تلقائيًا، قم بتشغيل تطبيقك أو استخدم الأداة المساعدة INTLTool. هناك طريقتان لملء جدول strings.dbf
بسلاسل واجهة مشروعك. الطريقة الأولى هي تشغيل البرنامج الخاص بك. عندما يتم إنشاء مثيل للكائنات، سيقوم INTL بإلحاق السلاسل (مثل Caption
و Tooltiptext
وما إلى ذلك) في جدول السلاسل. أفضل طريقة هي تشغيل برنامج التحديث INTLTool. انظر INTLTool.
أدخل الترجمات في جدول strings.dbf
. في العمود cSwahili
، اكتب الترجمات السواحلية، كاملة مع مفاتيح التشغيل السريع ومفاتيح الاختصار كما هو مطلوب. ملاحظة: يمكنك الحصول على ترجمة "سريعة وقذرة" للاختبار والعروض التوضيحية الداخلية عن طريق القيام بما يلي:
`REPLACE ALL cSwahili with "**"+TRIM(cOriginal)+"**" FOR cOriginal <> "(("`
أوصي بإنشاء كائن INTL رئيسي باسم _SCREEN.oINTL
.
من الممكن أن تتواجد عدة كائنات INTL منفصلة معًا. كل كائن INTL عبارة عن مزيج من كائنات INTL أخرى تسمى الخطافات أو الاستراتيجيات. كائن INTL الرئيسي الخاص بك هو كائن INTL الرئيسي في بيئتك، والذي أفترض أنه يسمى _SCREEN.oINTL
.
استخدم طريقة SetConfig( n )
لتكوين كائن INTL الرئيسي الخاص بك.
يمكنك تكوين INTL باستخدام أسلوب _SCREEN.oINTL.SetConfig( n )
حيث n
عبارة عن قيمة عدد صحيح للبت مع التفسير التالي:
قيمة | معنى التكوين |
---|---|
1 (افتراضي)2 4 8 16 32 | قم بتحميل استراتيجية السلسلة قم بتحميل استراتيجية الخط تحميل استراتيجية البيانات قم بتحميل استراتيجية الصورة قم بتحميل استراتيجية العملة قم بتحميل استراتيجية RightToLeft |
مثال: إنشاء كائن INTL يقوم بترجمة السلاسل والخطوط
*-- create an INTL object
_SCREEN.AddObject("oINTL", "INTL" )
*-- Load the strings and font strategies.
_SCREEN.oINTL.SetConfig( 1 + 2 )
يتم تكوين لغة التشغيل والإعدادات المحلية لكائن INTL الرئيسي باستخدام أساليب SetLanguage()
و SetLocale()
.
يتم تكوين الاستراتيجيات بطريقة البت.
تكوين الاستراتيجيات الفردية على النحو التالي: احصل على مرجع للاستراتيجية، ثم قم بتكوينها. فيما يلي معاني التكوين لكل استراتيجية قابلة للتكوين.
الإستراتيجية | قيمة | التعريب |
---|---|---|
بيانات | 1 (افتراضي)2 4 8 16 | BoundColumn ControlSource RowSource RecordSource InputMask |
الخط | 1 (افتراضي)2 (افتراضي) | Font وحجم FontSize DynamicFont و DynamicFontSize |
صورة | 1 (افتراضي)2 4 (افتراضي)8 | Picture DownPicture Icon DragIcon |
من اليمين إلى اليسار | 1 (افتراضي) | عكس كافة الكائنات داخل حاوياتها الخاصة |
سلاسل | 1 (افتراضي)2 (افتراضي)4 (افتراضي) | Caption ToolTipText StatusBarText |
للحصول على مؤشر على استراتيجية محملة، استخدم أسلوب oINTL.GetStrategy()
. بعد ذلك، استخدم أسلوب oINTL.SetConfig()
الخاص بالمقبض لتكوين الإستراتيجية.
مثال: قم بإنشاء كائن INTL يقوم بترجمة السلاسل وليس تلميحات الأدوات
استخدم أسلوب oINTL.GetStrategy()
للحصول على مرجع كائن، ثم استخدم أسلوب oINTL.SetConfig()
الخاص به لتكوينه.
*-- create an INTL object
_SCREEN.AddObject("oINTL", "INTL" )
*-- Load the strings and font strategies.
_SCREEN.oINTL.SetConfig( 3 )
*-- Configure Strings to NOT localize ToolTips
LOCAL loTempHandle
loTempHandle = _SCREEN.oINTL.GetStrategy( "String" )
*-- For the string strategy, the configuration
*-- for Caption and StatusBarText is 5
loTempHandle.SetConfig( 1 + 4 )
مثال: قم بإنشاء كائن INTL يقوم بترجمة السلاسل وInputMasks فقط.
*-- create an INTL object
_SCREEN.AddObject( "oINTL", "INTL" )
*-- Load the strings and data strategies.
_SCREEN.oINTL.SetConfig( 5 )
*-- now modify the data strategy from its default.
LOCAL oTemp
oTemp = _SCREEN.oINTL.GetStrategy( "Data" )
*-- Input masks only.
oTemp.SetConfig( 16 )
عادةً ما تكون سلاسل الواجهة هي أول ما يتبادر إلى ذهننا عندما نفكر في ترجمة البرامج.
يقوم INTL بتحميل إستراتيجية السلسلة فقط بشكل افتراضي.
يسرد الجدول التالي بتات التكوين لـ INTL. تحدد بتات التكوين هذه الإستراتيجية التي سيتم تحميلها. افتراضيًا، يتم تحميل استراتيجية السلسلة فقط، مما يعني أنه يتم ترجمة السلاسل تلقائيًا بواسطة INTL افتراضيًا.
فصل | بتات التكوين | التعريب |
---|---|---|
دولي | 1 (افتراضي)4 2 8 16 32 | تم تحميل استراتيجية cINTLString تم تحميل استراتيجية cINTLFont تم تحميل استراتيجية cINTLData تم تحميل استراتيجية cINTLPicture تم تحميل استراتيجية cINTLCurrency تم تحميل استراتيجية cINTLRightToLeft |
CINTLString | 1 (افتراضي)2 (افتراضي)3 (افتراضي) | Caption ToolTipText StatusBarText |
قم بتنشيط استراتيجية السلسلة كما يلي:
*-- cINTLString is loaded by default.
*-- So there’s usually no need to do this
_SCREEN.oINTL.SetStrategy( "String", "cINTLString" )
هناك طريقة أخرى أكثر تشفيرًا لتحميل إستراتيجية السلسلة وهي:
-- Set configuration bit 2^0 "ON"
_SCREEN.oINTL.SetConfig( BITSET( oINTL.GetConfig(), 0 ))
لذلك هناك طريقتان للقيام بذلك.
يمكن ترجمة السلاسل النصية من خلال توفير الترجمات في strings.dbf
.
الأصل | جالفرنسية |
---|---|
Yes | Oui |
No | Non |
قم بتكوين إستراتيجية السلسلة باستخدام طريقة SetConfig()
الخاصة بها.
يتم تكوين إستراتيجية INTL String، مثل جميع الاستراتيجيات، على أساس البت. يمكنك التحكم في كائن استراتيجية السلسلة كما يلي:
مثال: لتعطيل معالجة الخطوط لخاصية ToolTipText
:
*-- Get a handle on the string strategy:
oFont = _SCREEN.oINTL.GetStrategy( "String" )
*-- We want Caption( 1 ) and StatusbarText( 4 ) only
oFont.SetConfig( 5 )
يمكن أن تكون الخطوط خاصة بالإعدادات المحلية.
قد لا تكون الخطوط مثل Arial وTimes New Roman وMS Sans Serif مناسبة في بعض اللغات. هذا مهم؛ قد نحتاج إلى طريقة لتغيير الخطوط عندما نغير اللغات.
يسرد الجدول التالي بتات التكوين لكائن INTL لتحميل إستراتيجية الخط، وأعداد التكوين الصحيحة لتكوين إستراتيجية الخط.
فصل | بتات التكوين | التعريب |
---|---|---|
دولي | 1 (افتراضي)2 4 8 16 32 | تم تحميل استراتيجية cINTLString تم تحميل استراتيجية cINTLFont تم تحميل استراتيجية cINTLData تم تحميل استراتيجية cINTLPicture تم تحميل استراتيجية cINTLCurrency تم تحميل استراتيجية cINTLRightToLeft |
سينتلفونت | 1 (افتراضي)2 (افتراضي) | Font وحجم FontSize DynamicFont و DynamicFontSize |
قم بتنشيط استراتيجية الخطوط كما يلي:
*-- cINTLFont is the Font strategy class.
_SCREEN.oINTL.SetStrategy( "Font", "cINTLFont" )
هناك طريقة أخرى أكثر تشفيرًا لتحميل إستراتيجية الخط وهي:
*-- Set configuration bit 2^1 "ON"
_SCREEN.oINTL.SetConfig(BITSET(oINTL.GetConfig(),1 ))
لذلك هناك طريقتان للقيام بذلك.
يمكن ترجمة الخطوط من خلال توفير الترجمات في strings.dbf
. تكون مواصفات الخط مسبوقة بالمعرف " ((Font ))
"، على سبيل المثال:
الأصل | جالروسية |
---|---|
((Font))Courier New,10 | ((Font))Courier New Cyr,10 |
((Font))Arial,16 | ((Font))Arial Cyr,16 |
قم بتكوين إستراتيجية الخط باستخدام طريقة SetConfig()
الخاصة بها.
يتم تكوين إستراتيجية الخط INTL، مثل جميع الاستراتيجيات، بنظام البت. يمكنك التحكم في كائن استراتيجية الخط كما يلي:
مثال: لتعطيل معالجة الخطوط لـ DynamicFont
و DynamicFontSize
، مما سيؤدي إلى تحسين أداء استراتيجية الخطوط قليلاً:
*-- Set Font localization on
oINTL.SetConfig( BITSET( oINTL.GetConfig(), 1 )) && Set 2^1 "ON"
*-- Get a handle on the font strategy:
oFont = _SCREEN.oINTL.GetStrategy("Font" )
*-- We want Font and FontSize and to disable DynamicFont
*-- and DynamicFontSize
oFont.SetConfig( 1 )
يمكن أن تكون البيانات خاصة بالإعدادات المحلية.
في بعض الأحيان تكون البيانات نفسها هي التي تحتاج إلى الترجمة. يتيح لك INTL تقديم حقول مختلفة لمناطق مختلفة.
تعمل استراتيجية البيانات مثل الاستراتيجيات الأخرى.
يسرد الجدول التالي بتات التكوين لكائن INTL لتحميل إستراتيجية الصورة، وأعداد التكوين الصحيحة لتكوين إستراتيجية الصورة.
فصل | بتات التكوين | التعريب |
---|---|---|
دولي | 1 (افتراضي)2 4 8 16 32 | تم تحميل استراتيجية cINTLString تم تحميل استراتيجية cINTLFont تم تحميل استراتيجية cINTLData تم تحميل استراتيجية cINTLPicture تم تحميل إستراتيجية cINTLCurrency تم تحميل استراتيجية cINTLRightToLeft |
CINTLData | 1 (افتراضي)2 4 8 16 | BoundColumn ControlSource RowSource RecordSource InpuMask |
تفعيل استراتيجية البيانات كما يلي:
*-- cINTLData is the Graphics strategy class.
_SCREEN.oINTL.SetStrategy( "Data", "cINTLData" )
هناك طريقة أخرى أكثر تشفيرًا لتحميل إستراتيجية البيانات وهي:
*-- Set configuration bit 2^2 "ON"
_SCREEN.oINTL.SetConfig(BITSET(oINTL.GetConfig(),2 ))
لذلك هناك طريقتان للقيام بذلك.
يمكن ترجمة عناصر البيانات من خلال توفير الترجمات في strings.dbf
. تكون مواصفات البيانات مسبوقة بالمعرف " ((Data))
"، على سبيل المثال:
الأصل | روسي |
---|---|
((Data))cEngDesc | ((Data))cRussianDesc |
قم بتكوين إستراتيجية البيانات باستخدام طريقة SetConfig()
الخاصة بها.
يتم تكوين إستراتيجية بيانات INTL، مثل جميع الاستراتيجيات، على أساس البت. يمكنك التحكم في كائن إستراتيجية الصورة كما يلي:
مثال: ترجمة خصائص ControlSource.
*-- Set Data localization on
*-- Set 2^2 "ON"
oINTL.SetConfig( BITSET( oINTL.GetConfig(), 2 ))
*-- Get a handle on the data strategy:
oData = _SCREEN.oINTL.GetStrategy("Data" )
*-- We want ControlSource (2)
*-- property localized.
oPicture.SetConfig( 2 )
يمكن أن تكون الصور خاصة بالإعدادات المحلية. قد لا تكون بعض الرموز والصور التي نستخدمها يوميًا مناسبة في أماكن أخرى. يوفر INTL طريقة لتغيير الصور المعروضة عندما نغير اللغات.
تعمل استراتيجية الصورة مثل الاستراتيجيات الأخرى. يسرد الجدول التالي بتات التكوين لكائن INTL لتحميل إستراتيجية الصورة، وأعداد التكوين الصحيحة لتكوين إستراتيجية الصورة.
فصل | بتات التكوين | التعريب |
---|---|---|
دولي | 1 (افتراضي)2 4 8 16 32 | تم تحميل استراتيجية cINTLString تم تحميل استراتيجية cINTLFont تم تحميل استراتيجية cINTLData تم تحميل استراتيجية cINTLPicture تم تحميل إستراتيجية cINTLCurrency تم تحميل استراتيجية cINTLRightToLeft |
cINTLPicture | 1 (افتراضي)2 4 (افتراضي)8 | Picture DownPicture Icon DragIcon |
تفعيل استراتيجية الصورة كما يلي:
*-- cINTLPicture is the Graphics strategy class.
_SCREEN.oINTL.SetStrategy( "Picture", "cINTLPicture" )
هناك طريقة أخرى أكثر غموضًا لتحميل إستراتيجية الصورة وهي:
*-- Set configuration bit 2^3 "ON"
_SCREEN.oINTL.SetConfig(BITSET(oINTL.GetConfig(),3 ))
لذلك هناك طريقتان للقيام بذلك.
يمكن ترجمة الصور من خلال توفير الترجمات في strings.dbf
. تكون مواصفات الصورة مسبوقة بالمعرف " ((Picture))
"، على سبيل المثال:
coriginal | crussian |
---|---|
((Picture))Doctor.BMP | ((Picture))Doktor.BMP |
((Picture))Friend.BMP | ((Picture))Comrade.BMP |
قم بتكوين إستراتيجية الصورة باستخدام أسلوب SetConfig()
الخاص بها.
يتم تكوين إستراتيجية الصورة INTL، مثل جميع الاستراتيجيات، بنظام البت. يمكنك التحكم في كائن إستراتيجية الصورة كما يلي:
مثال: تعريب خصائص الصورة، والصورة السفلية، والرمز.
*-- Set Picture localization on
*-- Set 2^3 "ON"
oINTL.SetConfig( BITSET( oINTL.GetConfig(), 3 ))
*-- Get a handle on the font strategy:
oPicture = _SCREEN.oINTL.GetStrategy("Picture" )
*-- We want Picture (1), DownPicture( 2 ) and Icon (4)
*-- properties localized. 1+2+4 = 7
oPicture.SetConfig( 7 )
توفر INTL إمكانية متعددة العملات بسيطة وقابلة للتكيف.
يمكّنك INTL من منح تطبيقك إمكانية بسيطة متعددة العملات. تتميز هذه البنية بالمرونة، ومن خلال التصنيف الفرعي لفئة cINTLCurrency
، يمكنك على الأرجح تنفيذ أي نظام متعدد العملات تحتاجه تقريبًا.
في قلب كل ذلك، تعمل إستراتيجية عملة INTL فقط على الحقول التي لها خاصية تنسيق "$".
تذكر أن استراتيجيات INTL يتم تكوينها حسب البت وفقًا للجدول التالي.
الفئة (مع الافتراضي) | قيمة | التعريب |
---|---|---|
انتل (1) | 1 (افتراضي)2 4 8 16 32 | تم تحميل استراتيجية cINTLString تم تحميل استراتيجية cINTLFont تم تحميل استراتيجية cINTLData تم تحميل استراتيجية cINTLPicture تم تحميل استراتيجية cINTLCurrency تم تحميل استراتيجية cINTLRightToLeft |
تفعيل استراتيجية العملة على النحو التالي:
استخدم oINTL.SetConfig()
أو oINTL.SetStrategy()
لتحميل استراتيجية العملة.
OINTL = _SCREEN.oINTL
oINTL.SetStratrgy( "Currency", "cINTLCurrency" )
هناك طريقة بديلة (وأكثر غموضًا) وهي استخدام طريقة SetConfig()
الخاصة بـ INTL لجعل INTL يستدعي استراتيجية الخط لفئة معينة، كما يلي:
OINTL = _SCREEN.oINTL
*-- Set bit 2^4 "ON"
oINTL.SetConfig( BITSET( oINTL.GetConfig(), 4 ))
لذلك هناك طريقتان للقيام بذلك.
استراتيجية العملة ليست مثل الآخرين. تختلف إستراتيجية عملة مجموعة أدوات INTL قليلاً عن الاستراتيجيات الأخرى في ثلاثة جوانب مهمة:
العملات خاصة بالمكان ، وليست خاصة باللغة.
فئة cINTLCurrency
لا تستخدم خدمات فئة cINTLString
، و
فئة cINTLCurrency
تجعل العديد من حقول الإدخال للقراءة فقط عندما تكون البيانات في حالة محولة.
سعر الصرف الافتراضي لجميع العملات هو 1.00
.
مع فئة cINTLCurrency
التي تأتي مع INTL، يمكنك تعيين عوامل تحويل العملة لعملات مختلفة. بشكل افتراضي، يكون عامل التحويل الذي تستخدمه إستراتيجية العملة هو 1.00
.
إذا كنت بحاجة إلى تحويلات عملة تعتمد على الوقت، فيمكنك تصنيف cINTLCurrency
ضمن فئة فرعية للقيام بأي شيء تريد القيام به، مثل عمليات البحث.
لنقم بتكوين INTL للعملات التالية: الدولار الكندي واليورو والدولار الأمريكي. لنفترض أن بياناتنا مبنية على الدولار الكندي.
يقوم oINTL.SetConversion()
بتعيين سعر الصرف بين اللغات الأصلية واللغات الأخرى.
استخدم SetLocale()
لتغيير لغة العملة. ثم توطين كالمعتاد.
oINTL = _SCREEN.oINTL
*-- Load the currency strategy
*-- Set 2^4 "ON"
oINTL.SetConfig( BITSET( oINTL.GetConfig(), 4 ))
*-- Define a few locales and currencies
oINTL.SetConversion( "Canada", 1 )
oINTL.SetConversion( "Euro", 1.55 )
oINTL.SetConversion( "USA", 1.33 )
*-- Lets assume we want to see it in US dollars
oINTL.SetLocale( "USA" )
*-- Localize the current form
oINTL.Localize(_SCREEN.ActiveForm )
سيقوم INTL تلقائيًا بعرض كائنات النموذج الخاصة بك من اليمين إلى اليسار.
يمكّنك INTL من عرض الكائنات من اليمين إلى اليسار، وهو ما تتطلبه أنظمة الكتابة في الشرق الأوسط. للقيام بذلك، يقوم INTL بعكس موقع الكائنات داخل الحاويات على طول الخط المركزي الرأسي للحاوية. يقوم INTL أيضًا بتعديل خاصية المحاذاة لمربعات الاختيار ومجموعات الخيارات.
لا يغير INTL اتجاه نص التسمية التوضيحية. لتغيير اتجاه نص التسمية التوضيحية، يجب أن تستخدم الترجمة الشرق أوسطية لنظام التشغيل Windows.
والنتيجة هي أن النماذج معكوسة. فإذا قرأوا من اليسار إلى اليمين فإنهم الآن يقرؤون من اليمين إلى اليسار، والعكس صحيح.
تذكر أن استراتيجيات INTL يتم تكوينها حسب البت وفقًا للجدول التالي:
الفئة (مع الافتراضي) | قيمة | التعريب |
---|---|---|
انتل (1) | 1 (افتراضي)2 4 8 16 32 | تم تحميل استراتيجية cINTLString تم تحميل استراتيجية cINTLFont تم تحميل استراتيجية cINTLData تم تحميل استراتيجية cINTLPicture تم تحميل إستراتيجية cINTLCurrency تم تحميل استراتيجية cINTLRightToLeft |
تفعيل استراتيجية العملة على النحو التالي:
استخدم oINTL.SetConfig()
أو oINTL.SetStrategy()
لتحميل استراتيجية العملة.
OINTL = _SCREEN.oINTL
oINTL.SetStratrgy( "RightToLeft", "cINTLRightToLeft" )
An alternate (and more cryptic ) way is to use INTL's `SetConfig()` method make INTL invoke the Font strategy of a given class, as follows:
OINTL = _SCREEN.oINTL<b
*-- Set bit 2^5 "ON"
oINTL.SetConfig( BITSET( oINTL.GetConfig(), 5 ))
لذلك هناك طريقتان للقيام بذلك.
إن إستراتيجية RightToLeft هي الإستراتيجية الوحيدة التي تقوم فعليًا بإعادة ترتيب الكائنات في الحاويات.
تختلف استراتيجية الاتجاه من اليمين إلى اليسار لمجموعة أدوات INTL قليلاً عن الاستراتيجيات الأخرى في أربعة جوانب مهمة:
cINTLRightToLeft
خدمات فئة cINTLString
.cINTLRightToLeft
بعكس موقع الكائنات داخل الحاويات على طول المحور الرأسي للحاوية. ما كان على اليسار ينتهي إلى اليمين، والعكس صحيح. يتم أيضًا عكس خاصية المحاذاة الخاصة بمربعات الاختيار ومجموعات الخيارات، كما هو الحال مع تسلسل الصفحات في إطارات الصفحات والأعمدة في الشبكات.cINTLRightToLeft
للكتابة من اليسار إلى اليمين. لنقم بتكوين INTL للغة ذات الاتجاه من اليمين إلى اليسار. أنظف طريقة للقيام بذلك هي باستخدام فئة فرعية من أسلوب INTL::SetLanguage()
. وبدلاً من ذلك، يمكنك أيضًا القيام بذلك باستخدام الأسلوب SetLocale()
. وفي كلتا الحالتين، التنفيذ هو نفسه.
في هذا المثال، نستخدم SetLanguage()
لتكوين تحويل RightToLeft.
ملاحظة: للتوضيح، قمنا بحذف تكوين إستراتيجية الخط، وهو الأمر الذي ربما يتعين علينا القيام به. راجع كيفية توطين الخطوط.
DEFINE CLASS MidEastINTL AS INTL
FUNCTION SetLanguage( tcLanguage )
LOCAL llRetVal
LlRetVal = INTL::SetLanguage( tcLanguage )
*-- The right-to-left strategy is configured
*-- with the fifth INTL configuration bit.
IF tcLanguage = "Hebrew" OR ;
TcLanguage = "Arabic"
this.SetConfig( BITSET( this.GetConfig(), 5 ))
ELSE
this.SetConfig( BITCLEAR( this.GetConfig(), 5 ))
ENDIF
RETURN llRetVal
ENDDEFINE
هل تحتاج إلى سلوك مختلف؟ النظر في فئة فرعية. قد تواجه مواقف تحتاج فيها إلى القيام بالأشياء بشكل مختلف. بدلًا من تغيير كود مصدر INTL (مما سيخلق صعوبات عند دمج الإصدارات المستقبلية)، فكر في تصنيف استراتيجية موجودة بالفعل إلى فئات فرعية للسلوك المرغوب.
في الرسم البياني أدناه، قمنا بإنشاء فئتين فرعيتين، واحدة من فئة cINTLString
والأخرى من فئة cINTLCurrency
. يبدو التسلسل الهرمي للفئة الآن كما يلي:
تمت إضافة فئات جديدة إلى التسلسل الهرمي لفئة INTL.
لاستخدام الفئات الفرعية الخاصة بك بدلاً من تلك التي تأتي مع INTL، اتصل بالطريقة setstrategy() كما يلي:
*-- Assuming _SCREEN.oINTL is already Instantiated
_SCREEN.oINTL.SetStrategy("String", "cMyString" )
_SCREEN.oINTL.SetStrategy("Currency", "cMyCurrency" )
يمكنك إنشاء إستراتيجياتك الخاصة واستخدام INTL لاستدعائها تلقائيًا. اجعل إستراتيجيتك الجديدة فئة فرعية من فئة cINTLStrategy (بحيث يكون لديك الخصائص والأساليب التي تتوقعها INTL) ثم استخدمها!
كما هو الحال في حالة التصنيف الفرعي لاستراتيجية موجودة، استخدم طريقة SetStrategy()
لتحميل استراتيجيتك في INTL.
ثلاث طرق:
يمكنك جعل INTL يتجاهل كائنًا أو كائن حاوية عن طريق وضع السلسلة "INTL Ignore" في خاصية التعليق الخاصة بالكائن. هذه السلسلة ليست حساسة لحالة الأحرف.
إذا استطعت، قم بإعطاء فئة الكائن الخاص بك خاصية INTL، وقم بتعيينها منطقيًا .F.
إذا أمكن، قم بإعطاء فئة الكائن الخاص بك خاصية INTL، وقم بتعيين قيمة رقمية لها أقل من 0.
إذا كانت لديك احتياجات خاصة لكائن معين، فامنح فئة الكائن الخاص بك خاصية INTL، وقم بتعيين قيمة رقمية للخاصية في تعريف الفئة أو لمثيل هذا الكائن. هذه القيمة الرقمية هي القيمة التي ستقوم بتعيينها لطريقة SetConfig()
الخاصة بـ INTL لتكوين INTL لهذا الكائن المحدد.
إذا كنت ترغب في استبدال إستراتيجياتك الخاصة في عمليات إنشاء الإستراتيجية اللاحقة، استخدم طريقة SetStrategyClass()
لتعيين فئة إستراتيجية جديدة لاسم مستعار للإستراتيجية الموجودة.
*-- Permanently install cMyStringStrategy for the string strategy.
_SCREEN.oINTL.SetStrategyClass( "String", "cMyStringStrategy" )
strings.dbf
يأتي INTL مزودًا بفئات مكرر وزائر مصممة لتكرار هياكل VFP، ومن بين أشياء أخرى، تحميل كافة عناصر واجهة السلسلة في strings.dbf
.
راجع تحديث strings.dbf
استنادًا إلى .PJX.
لا يتم إنشاء أو تجميع بنيات تقارير VFP — فهي مرتبطة بالتطبيق الخاص بك "كما هي". ولذلك يجب أن يتم تحويل التقارير قبل إنشاء .APP أو .EXE.
يعد توطين التقارير أمرًا لا تحتاج إلى القيام به إلا مرة واحدة. تقوم عملية التحويل بتحويل تسميات التقرير الخاص بك إلى تعبيرات تقرير تحتوي على استدعاء الدالة I()
الخاصة بـ INTL. على سبيل المثال، تصبح تسمية التقرير "Name:"
هي التعبير I("Name:")
.
راجع تحويل التقارير بناءً على .PJX.
إذا كنت تخطط للتمتع حقًا بتبادل اللغات بسرعة، فسيكون من المفيد معرفة الأشياء التالية:
بعد أن يقوم INTL بترجمة نموذج، فإنه يضيف إلى النموذج كائنًا يسمى oINTL من فئة cINTLMemento
التي تم تكوينها كما تم تكوين INTL. هذا التذكار عبارة عن كائن خفيف الوزن يسمح للعديد من كائنات INTL بالتعايش بسلام لأنها يمكن أن تعرف أن نموذجًا معينًا يتم عرضه، في هذه اللحظة، باللغة اليابانية على سبيل المثال.
عندما يعثر كائن INTL على نموذج يحتوي على عضو يسمى oINTL، فسوف يتبنى تكوين العضو كما هو محدد بواسطة قيمة GETCONFIG()
الخاصة به.
إذا كنت بحاجة إلى سلوك بديل - على سبيل المثال، إذا كنت بحاجة إلى كائن INTL الثاني لتجاوز تذكار من الأول بالكامل - فقم أولاً بترجمة النموذج مرة أخرى إلى الأصل (مما يؤدي إلى إزالة عضو Form.oINTL) ثم قم بالترجمة إلى اللغة الجديدة باستخدام الأمر كائن INTL الثاني
MsgSvc()
عند الاستدعاء الأول، يقوم MsgSvc()
بإنشاء كائن يسمى _SCREEN.oMsgSvc
والذي سيقوم بعد ذلك بإدارة المراسلة. في حالة وجود كائن يسمى _SCREEN.oINTL
، سيلتزم الكائن _SCREEN.MsgSvc
بإعدادات اللغة الخاصة به ويستخدم خدماته.
لتوطين وقت التشغيل، تحتاج إلى توزيع الملفات التالية:
ملف | ملحوظات |
---|---|
i.prg | للحصول على أفضل أداء، ضع هذه الوظيفة في ملف SET PROCEDURE الأول. |
intl.prg | للحصول على أفضل أداء، SET PROCEDURE TO INTL Additive . |
msgsvc.dbf | |
msgsvc.fpt | |
msgsvc.cdx | إذا كنت تستخدم MsgSvc() فسوف تحتاج إلى توزيع هذه الملفات. |
msgsvc.prg | مكتبة خدمات الرسائل. |
nohot.prg | للحصول على أفضل أداء، ضع هذه الوظيفة في ملف SET PROCEDURE الأول. |
strings.dbf | |
strings.fpt | |
strings.cdx | ستحتاج إلى توزيعها أيضًا. |
بالنسبة للجداول والملفات STRINGS وMSGSVC، إذا قمت بتضمينها في APP أو EXE الخاص بك، فستكون بالطبع للقراءة فقط.
فيما يلي وصف للملفات التي يستخدمها INTL. لتحديد المكان الأفضل لوضعها بالنسبة لمشروعك، راجع كيفية وضع ملفات INTL بشكل صحيح.
ملف | وصف |
---|---|
addendum.txt | الأخبار العاجلة المتأخرة التي قد يتم تضمينها أو لا يتم تضمينها في الوثائق أو ملف المساعدة. |
genmenux.zip | أرشيف لأحدث برنامج GEMENUUX المتوفر من تأليف Andrew Ross MacNeill. |
i.prg | دالة مستقلة تعمل كاختصار للأسلوب _SCREEN.oINTL.I() . |
intl.prg | الكود الأساسي للفئات والأدوات المساعدة في مجموعة أدوات INTL. |
intltool.prg | الأدوات المساعدة للمطور للقيام بعمليات مجمعة على ملفات المشروع وهياكل VFP الأخرى. لا تقم بتوزيع هذا الملف مع التطبيقات الخاصة بك. |
msgsvc.dbf msgsvc.fpt msgsvc.cdx | يحتوي الجدول والملفات الداعمة على رسائل لمربعات الحوار ونوافذ الانتظار وأشرطة مقياس الحرارة وكتل النص. |
msgsvc.prg | مكتبة خدمات الرسائل. |
nohot.prg | يقوم nohot() بإزالة أحرف المفتاح السريع من تعبيرات موجه FoxPro. إنها وظيفة من سطر واحد يجب عليك قصها ولصقها كإجراء في مكان ما في مكدس الاستدعاءات الخاص بالتطبيق الخاص بك. |
strings.dbf strings.fpt strings.cdx | الجدول والملفات الداعمة التي تحتوي على عبارات مترجمة. |
يعتمد التسلسل الهرمي لفئة INTL على فئة cINTLAbstract
. يعمل cINTLAbstract
على تحديد الواجهة للتسلسل الهرمي بأكمله. كلما كان ذلك ممكنًا، تم تجنب إضافة خصائص وأحداث وأساليب خادعة إلى الفئات الفرعية.
يوضح الشكل أدناه مخطط OMT للتسلسل الهرمي لفئة INTL.
التسلسل الهرمي لفئة INTL.
في الظروف العادية، الكائنات الوحيدة التي من المحتمل أن تستخدمها هي من فئة INTL
.
يمكن استخدام فئة cINTLMemento
كرمز مميز.
cINTLMemento
هو رمز تكوين يمكن أن تستخدمه كائنات INTL لتخزين تفاصيل ترجمة معينة. يتضمن cINTLMemento
طرق الوصول إلى الخصائص المحمية.
INTL هي الواجهة العامة وأساليب القالب لعملية الترجمة.
cINTLStrategy هي الفئة الأم لمحركات الترجمة المختلفة.
cINTLString
و cINTLCurrency
و cINTLFont
و cINTLMeasures
و cINTLPicture
و cINTLData
هي فئات من التطبيقات الإستراتيجية المحددة.
INTL
توفر فئة INTL خدمات لتوطين الكائنات والعناصر الأخرى في تطبيقك.
INTL
المكشوفة INTL::cCurrencyStrategy
يتيح لك INTL توطين العملات.
سلسلة تحدد اسم فئة إستراتيجية العملة.
تقصير | "cINTLCurrency" |
ملاحظات | يمكنك تصنيف cINTLCurrency بشكل فرعي ليناسب احتياجاتك الخاصة. يمكنك بعد ذلك استخدام الأسلوب SetStrategy("Currency",cYourCurrencyClass) لتعيين خاصية إستراتيجية العملة هذه على شيء آخر غير الافتراضي. |
انظر أيضا | cINTLMemento::GetStrategy() |
INTL::cDataStrategy
يسمح INTL بمصادر بيانات مختلفة لمناطق مختلفة. سلسلة تحدد اسم فئة استراتيجية البيانات.
تقصير | "cINTLData" |
ملاحظات | يمكنك تصنيف cINTLData ضمن فئة فرعية لتناسب احتياجاتك الخاصة. يمكنك استخدام الأسلوب SetStrategy("Data", cYourDataClass) لتعيين خاصية إستراتيجية البيانات هذه على شيء آخر غير الافتراضي. |
انظر أيضا | cINTLMemento::GetStrategy() |
INTL::cFontStrategy
يسمح INTL باستبدال الخطوط المناسبة.
سلسلة تحدد اسم فئة استراتيجية الخط.
تقصير | "cINTLFont" |
ملاحظات | يمكنك إنشاء فئة فرعية cINTLFont لتناسب احتياجاتك الخاصة. يمكنك استخدام SetStrategy("Font", cYourFontClass) لتعيين خاصية إستراتيجية الخط إلى شيء آخر غير الافتراضي. |
انظر أيضا | cINTLMemento::GetStrategy() |
INTL::cPictureStrategy
يمكن لـ INTL توطين الصور والأيقونات والصور.
سلسلة تحدد اسم فئة إستراتيجية الصورة.
تقصير | "cINTLPicture" |
ملاحظات | يمكنك تصنيف cINTLPicture ضمن فئة فرعية لتناسب احتياجاتك الخاصة. يمكنك استخدام ::SetStrategy("Picture", cYourPictureClass ) لتعيين خاصية إستراتيجية الصورة على شيء آخر غير الافتراضي. |
انظر أيضا | cINTLMemento::GetStrategy() |
INTL::cStringStrategy
يقوم INTL بترجمة الكلمات والعبارات.
سلسلة تحدد اسم فئة استراتيجية السلسلة. فئة إستراتيجية السلسلة مسؤولة عن ترجمة السلاسل والعبارات في التطبيق، وتعمل أيضًا كمستودع وظيفي لفئات الإستراتيجية الأخرى.
تقصير | "cINTLSting" |
ملاحظات | يمكنك تصنيف cINTLString فرعيًا ليناسب احتياجاتك الخاصة. يمكنك استخدام SetStrategy("String", cYourStringClass) لتعيين الخاصية. |
انظر أيضا | cINTLMemento::GetStrategy() |
تعتبر فئة إستراتيجية cINTLString هي الأكثر فائدة على الإطلاق، وتوفر خدمات للاستراتيجيات الأخرى. | ملاحظة: تستخدم العديد من الاستراتيجيات الخدمات المستندة إلى السلسلة التي توفرها فئة استراتيجية السلسلة النشطة. لتقليل التماسك مع فئة cStringStrategy معينة، تم العثور على العديد من أساليب السلسلة التي تنتمي عادةً إلى فئة cStringStrategy في فئة cINTLStrategy ، فئة الإستراتيجية الأصلية. وبالتالي فإن جميع الاستراتيجيات لديها بعض قدرات توطين السلسلة المتأصلة. |
INTL
المكشوفة INTL::Execute()
يقوم بترجمة رقم أو سلسلة أو كائن أو مجموعة من الكائنات. في حالة الكائنات ومصفوفة الكائنات، تقوم وظيفة التنفيذ بتمرير كل كائن بدوره إلى جميع استراتيجيات الترجمة النشطة.
بناء الجملة | oINTL.Execute( @PassedObject ) |
يعود | لا شئ |
الحجج | PassedObject : يمكن أن يكون من النوع الرقمي، أو السلسلة، أو الكائن. يمكن أن يكون أيضًا مجموعة من مراجع الكائنات. |
انظر أيضا | INTL::ObjArray() |
مثال
DIMENSION laScratchArray[1]
SET PROC TO INTL
oINTL = CREATEOBJECT("INTL" )
oXX = CREATEOBJECT("Form" )
*-- Load the array with object references
oINTL.ObjArray( oXX, @laScratchArray )
oINTL.Execute( @laScratchArray )
INTL::GetAlias()
| قد تتطلب الاستراتيجيات ملفات الموارد، والتي يتم الرجوع إليها بالاسم المستعار.
إرجاع الاسم المستعار لجدول الموارد المرتبط بإستراتيجية الترجمة الافتراضية. عادةً ما يكون كائن الإستراتيجية الافتراضي من فئة cINTLString
.
بناء الجملة | oINTL.GetAlias() |
يعود | قيمة الحرف للاسم المستعار لجدول إستراتيجية السلسلة. |
الحجج | لا أحد. |
ملاحظات | تعد طريقة GetAlias() طريقة قابلة للربط ، مما يعني أنه إذا كان كائن من فئة INTL يحتوي على كائن ربط مرفق، فإن GetAlias() يتنازل عن أسلوب كائن الخطاف. نظرًا لأن كائنات الفئة INTL يتم ربطها افتراضيًا بكائن من فئة cINTLStringStrategy ، فإن استدعاء oINTL.GetAlias() يعادل استدعاء oINTL.oStringStrategy.getAlias() . |
مثال
_SCREEN.AddObject( "oINTL", "INTL" )
*-- The following two are equivalent
_SCREEN.oINTL.oStringStrategy.GetAlias()
_SCREEN.oINTL.GetAlias() |
INTL::GetTable()
إرجاع اسم جدول الموارد المرتبط