Giới thiệu
Phần này ban đầu mình định viết Ini, Reg và AutoIT nhưng sau thì thấy cụt ý quá nên mình đã xóa và viết bài này vì nội dung ngắn gọn, xúc tích và đơn giản hơn.
Hướng dẫn
Phần này có liên quan đôi chút về Ini File (.ini) nên mình sẽ nói đôi chút về file ini
Cấu trúc của file Ini như này:
[Section]
Key=Value
Giải thích:
- Section: Phần, nghĩ đơn giản là từng phần
- Key: Một từ khóa nào đó
- Value: Giá trị của từ khóa đó
Mình sẽ cho vài ví dụ:
[Rio]
say=hello
Ở đây ta có section là Rio, key là say, value là hello. Nói thẳng ra thằng Rio nó bảo (say): helllo (chat đấy).
Phần Ini tới đây là xong. Tiếp theo mình sẽ nói về cách hoạt động của phần mềm.
Cách hoạt động thế này. Đầu tiên ta có một cái GUI, trong cái GUI đó cần có các label (vì text sẽ được thay vào label đó), button hay checkbox hay radio gì đó thì tùy nhưng mình sẽ chọn checkbox vì nó đơn giản (tất nhiên mấy cái kia cũng đơn giản nếu bạn biết sử dụng checkbox). Sau khi click chọn vào checkbox (checked) thì ngôn ngữ trong file sẽ được thay đổi.
Sau khi code xong, nghĩ lại thì thấy có lẽ mình khỏi làm thành file .ini luôn cho gọn và tự hỏi lại rằng mình đã code có sai gì không hay là hay hoặc dở. (haizz). Thôi bắt đầu nào. Vì thế phần này mình chỉ viết cho các bạn xem để nắm sơ về cơ bản của một phần mềm đa ngôn ngữ thôi.
Đầu tiên các bạn tạo một GUI có checkbox hay button hoặc radio gì đó nhưng phần này mình sẽ sử dụng checkbox cho đơn giản.
Tiếp theo, ta tạo một file tên bất kì có đuôi là .ini. Mình lấy ví dụ là Lan.ini
Cách tạo: Tạo một file .txt bằng notepad sau đó đổi đuôi lại .ini là xong
Trong file Lan.ini các bạn nhập vào 2 mục, 1 là ENG, 2 là VIE để trong dấu ngoặt
Ví dụ:
[ENG]
[VIE]
Đây là cái trong Lan.ini của mình
[ENG]
User=Username:
Pass=Password:
Login=Login
Msg=Login successfully!
Error=Error !!!
[VIE]
User=Tài khoảng:
Pass=Mật khẩu:
Login=Đăng nhập
Msg=Đăng nhập thành công!
Error=Lỗi !!!
Giải thích:
User, Pass, Login, Msg, Error là Key; là những chú thích, phần này chỉ là cơ bản và do mình tự chế nên mình nghĩ mấy cái đó không cần quan tâm, cái cần quan tâm là những cái value kia.
Tiếp theo là bước gắn dữ liệu vào biến (case biến). Ở trong cái GUI của mình, có 2 control cần case biến là checkbox và button và 2 cái này hoạt động riêng biệt.
Mình đặt func cho checkbox là ChangeLan()
Case $Checkbox
ChangeLan()
Tiếp theo, mình cần đọc xem checkbox có được check hay không, ta sử dụng hàm GUICtrlRead (đặt trong func ChangeLan nhé)
Global $rLan = GUICtrlRead($Checkbox)
Nếu có (tức = 1) thì cái gì đó sẽ xảy ra, ta có đoạn code mẫu
If GUICtrlRead($checkbox) = 1 Then ;~ Tức đã được check
....
Else ;~ ElseIf GUICtrlRead($checkbox) = 4 (= 4 là không chọn)
....
EndIf
Nếu checkbox được checked thì ngôn ngữ VIE-Vietnamese sẽ được set. Còn bỏ checked thì ngôn ngữ sẽ trở lại mặc định (mặc định là ENG - English). Hàm kiểm tra xem checkbox mình đã viết ở trên rồi giờ tới phần đọc file Ini. Ta sử dụng hàm IniReadSection
$IniEng = IniReadSection(@ScriptDir & "\Lan.ini", "ENG")
$IniVie = IniReadSection(@ScriptDir & "\Lan.ini", "VIE")
Các bạn để ý kỉ, Lan.ini là file mà mình kêu bạn tạo ở trên. Còn ENG và VIE là 2 section mà mình cũng đã kêu bạn đặt trong file Lan.ini đó. @ScriptDir là một macro, file autoit này bạn để ở đâu thì nó sẽ tìm ngay tại nơi đó một file có tên là Lan.ini, tuy nhiên bạn phải đặt thêm dấu "\" vào trước chữ Lan.ini là vì thế này. Bạn hãy chạy thử MsgBox với nội dung sau thử xem
MsgBox(0, "", @ScriptDir & "Lan.ini")
Đây là hình ảnh của mình sau khi chạy
Bạn có thấy gì lạ không? :)) Đấy, Multi Language là folder chứa file .au3 và cả file Lan.ini của mình. Nếu bạn không đặt dấu "\" vào trước file Lan.ini thì code sẽ bị lỗi, nó sẽ tìm file "Multi LanguageLan.ini". Lưu ý là dấu "\" nhé.
Đây là link sau khi mình thêm dấu "\" vào. Như thế khi code nó đọc, nó sẽ tìm một file Lan.ini trong thư mục Multi Language <3
Thực ra còn một hàm nữa là IniReadSectionNames nhưng mình không biết dùng :'>
Tiếp theo, sau khi đọc section của file Lan.ini thì code sẽ trả về các giá trị như thế này
IniReadSection ( "filename", "section" )
Remarks
$aArray[n][0] = nth Key
$aArray[n][1] = nth Value
Ví dụ: 1 file ini có section là Rio, key là say, value là hello.
$read=IniReadSection(@ScriptDir & "/rio.ini", "Rio")
Ta sẽ được trả về 2 dữ liệu
$read[1][0]="Say"
$read[1][1]="Hello"
Hiểu chứ :)) cũng đơn giản mà. Trong bài này thì ta chỉ quan tâm tới value thôi, key bỏ đi nên mình chỉ sử dụng [1][1], [2][1], [3][1], ..... [n][1] thôi.
Ta có sẵn một func ở trên, func ChangeLan() trong func đó có một hàm là GUICtrlRead($checkbox) mà ở trên mình kêu thêm đấy. Sau khi đã gắn biến vào để kiểm tra rồi, ta sẽ dùng hàm If...EndIf để set text ngôn ngữ lên Label. (ở trên mình đã nói rồi, ở trên có cái hàm mẫu).
Nếu checkbox được checked thì = 1, ta sẽ set ngôn ngữ Vietnamese vào
GUICtrlSetData($Label_User, $IniVie[1][1])
GUICtrlSetData($Label_Pass, $IniVie[2][1] )
GUICtrlSetData($Button_Login, $IniVie[3][1])
Còn không hoặc bỏ chọn thì sẽ trở về mặc định, English
GUICtrlSetData($Label_User, $IniEng[1][1])
GUICtrlSetData($Label_Pass, $IniEng[2][1])
GUICtrlSetData($Button_Login, $IniEng[3][1])
Thế là xong.
À còn một vấn đề nữa, chính là phần Login. Phần login thì bạn có thể tự code (nếu có xem phần 1 và phần 2) và kèm áp dụng phần Remarks vào thì sẽ rất dễ.
Bạn nào không làm được thì xem code nhé.
Login:
Tài khoảng: admin
Mật khẩu: admin
Chúc bạn thành công
Mã nguồn
Source: http://menly.ml/view/6fafa1e1
Lan.ini: http://menly.ml/view/a5b85e99