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
ไดรเวอร์ GENMENUX ใช้เพื่อแปลเมนู หากต้องการเปิดใช้งาน GENMENUX และไดรเวอร์ 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”
นี่คือทั้งหมดที่คุณต้องเปลี่ยนในสภาพแวดล้อมการพัฒนาเพื่อแปลเมนูเป็นภาษาท้องถิ่น ต่อจากนี้ไปก็สร้างเมนูได้ตามปกติ
GENMENUX เจ๋งมาก ตรวจสอบออก
หมายเหตุ : GENMENUX ไม่ได้แทนที่ตัวสร้างเมนูดั้งเดิมของ VFP เนื่องจาก GENMENUX เรียก GENMENU.PRG รหัสของคุณจึงถูกสร้างขึ้นโดย VFP ตามปกติ ชุดเครื่องมือ INTL ใช้ GENMENUX เป็นตัวประมวลผลล่วงหน้า GENMENUX เป็นโปรแกรมที่หลากหลาย โปรดดู GENMENUX สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ
โครงสร้างของ 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 อื่น ๆ ที่เรียกว่า hooks หรือกลยุทธ์ วัตถุ INTL หลักของคุณคือวัตถุ INTL หลักในสภาพแวดล้อมของคุณ ซึ่งฉันคิดว่าเรียกว่า _SCREEN.oINTL
ใช้เมธอด SetConfig( n )
เพื่อกำหนดค่าออบเจ็กต์ INTL หลักของคุณ
คุณกำหนดค่า INTL ด้วยเมธอด _SCREEN.oINTL.SetConfig( n )
โดยที่ n
คือค่าจำนวนเต็มระดับบิตด้วยการตีความต่อไปนี้:
ค่า | ความหมายการกำหนดค่า |
---|---|
1 (ค่าเริ่มต้น)2 4 8 16 32 | โหลดกลยุทธ์ String โหลดกลยุทธ์แบบอักษร โหลดกลยุทธ์ข้อมูล โหลดกลยุทธ์รูปภาพ โหลดกลยุทธ์สกุลเงิน โหลดกลยุทธ์ 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 บิตการกำหนดค่าเหล่านี้จะตัดสินใจว่าจะโหลดกลยุทธ์ใด ตามค่าเริ่มต้น เฉพาะกลยุทธ์ String เท่านั้นที่ถูกโหลด ซึ่งกล่าวได้ว่าสตริงได้รับการแปลโดยอัตโนมัติโดย 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" )
อีกวิธีที่เป็นความลับมากขึ้นในการโหลดกลยุทธ์ String คือ:
-- Set configuration bit 2^0 "ON"
_SCREEN.oINTL.SetConfig( BITSET( oINTL.GetConfig(), 0 ))
มีสองวิธีที่จะทำ
สามารถแปลสตริงได้โดยจัดให้มีการแปลใน strings.dbf
cต้นฉบับ | cภาษาฝรั่งเศส |
---|---|
Yes | Oui |
No | Non |
กำหนดค่า String Strategy ด้วยเมธอด 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 แล้ว |
CINTLFont | 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 ))
” ตัวอย่างเช่น:
cต้นฉบับ | ครัสเชียน |
---|---|
((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 เพื่อโหลดกลยุทธ์ Picture และจำนวนเต็มการกำหนดค่าเพื่อกำหนดค่ากลยุทธ์ Picture
ระดับ | บิตการกำหนดค่า | รองรับหลายภาษา |
---|---|---|
นานาชาติ | 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))
” เช่น:
cต้นฉบับ | ครัสเชียน |
---|---|
((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 เพื่อโหลดกลยุทธ์ Picture และจำนวนเต็มการกำหนดค่าเพื่อกำหนดค่ากลยุทธ์ Picture
ระดับ | บิตการกำหนดค่า | รองรับหลายภาษา |
---|---|---|
นานาชาติ | 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 |
กำหนดค่า Picture Strategy ด้วยเมธอด SetConfig()
เช่นเดียวกับกลยุทธ์อื่นๆ กลยุทธ์ภาพ INTL ได้รับการกำหนดค่าในระดับบิต คุณสามารถควบคุมออบเจ็กต์กลยุทธ์รูปภาพได้ดังนี้:
ตัวอย่าง: แปลคุณสมบัติรูปภาพ, DownPicture และไอคอน
*-- 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
กลับตำแหน่งของวัตถุภายในคอนเทนเนอร์ตามแกนตั้งของคอนเทนเนอร์ สิ่งที่อยู่ทางซ้ายก็จบลงทางด้านขวาและในทางกลับกัน นอกจากนี้ คุณสมบัติการจัดตำแหน่งของช่องทำเครื่องหมายและกลุ่มตัวเลือกจะกลับกัน เช่นเดียวกับลำดับของหน้าใน Pageframes และคอลัมน์ในกริด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 หากคุณรวมไว้ในแอปหรือ EXE ของคุณ แน่นอนว่าพวกเขาจะเป็นแบบอ่านอย่างเดียว
นี่คือคำอธิบายของไฟล์ที่ใช้โดย INTL หากต้องการพิจารณาว่าตำแหน่งเหล่านี้สามารถวางได้ดีที่สุดเมื่อเทียบกับโครงการของคุณ โปรดดูวิธีวางไฟล์ INTL ของคุณอย่างถูกต้อง
ไฟล์ | คำอธิบาย |
---|---|
addendum.txt | ข่าวด่วนที่อาจรวมหรือไม่รวมไว้ในเอกสารประกอบหรือไฟล์ช่วยเหลือ |
genmenux.zip | ไฟล์เก็บถาวรของโปรแกรม GENMENUX ล่าสุดที่มีอยู่โดย 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 เป็นคลาส Parent ของเอ็นจิ้นการแปลที่หลากหลาย
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() เป็นเมธอด hookable ซึ่งหมายความว่าหากอ็อบเจ็กต์ของคลาส INTL มีอ็อบเจ็กต์ hook ที่แนบมา GetAlias() จะเลื่อนไปตามเมธอดของอ็อบเจ็กต์ hook เนื่องจากโดยค่าเริ่มต้นอ็อบเจ็กต์ของคลาส 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()
ส่งกลับชื่อของตารางทรัพยากรที่เกี่ยวข้อง