![]() | |
![]() |
Off-line версия журнала "Sources.RU Magazine". Выпуск "Декабрь 2004" |
· От редактора · Создание сайта · Программирование на IAR · Обзор UPS · mIRC + Delphi = WinAmp Plugin · Многоязыковое приложение · Передача файлов через сокеты · H.323: Обзор архитектуры · Введение в KDevelop · Linux Live CD - Основы · Microsoft Speech API — Синтез речи |
Многоязыковое приложениеАвтор: miksayerИтак, вы написал офигенную программу и решили ее перевести на другие языки, чтобы буржуи тоже знали про вашу программу. Конечно, можно менять надписи на меню и кнопках вручную, но в этом есть несколько недостатков:
В таком случае лучше сделать так, чтобы юзер сам мог добавлять и изменять языки программы. Это легко сделать загружая все надписи из INI-файлов. Для этого нам понадобится модуль для чтения/записи INI-файлов:
Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long Function WriteINI(sSection As String, sKeyName As String, sNewString As String, sINIFileName As String) As Boolean On Local Error Resume Next Call WritePrivateProfileString(sSection, sKeyName, sNewString, sINIFileName) WriteINI = (Err.Number = 0) End Function Function ReadINI(sSection As String, sKeyName As String, sINIFileName As String) As String On Local Error Resume Next Dim sRet As String sRet = String(255, Chr(0)) ReadINI = Left(sRet, GetPrivateProfileString(sSection, ByVal sKeyName, "", sRet, Len(sRet), sINIFileName)) End Function Теперь давайте напишем специальную функцию, которая читала бы INI-файлы и изменяла надписи на контролах. Киньте на форму пару кнопок. А вот и сама функция:
Public Function LoadLanguage(lang As String)
' читаем надпись для первой кнопки Dim com1 As String com1=ReadINI("MAIN", "Com1", lang) Form1.Command1.Caption = com1 ' читаем надпись для второй кнопки Dim com2 As String com2=ReadINI("MAIN", "Com2", lang) Form1.Command2.Caption = com2 End Function И создайте в папке с нашей программой файл lang.ini с таким текстом:
[MAIN]
Com1=Sources.RU Com2=Исходники.РУ Теперь в событии Form_Load пишем:
Private Sub Form_Load()
Call LoadLanguage(App.Path & "\lang.ini") End Sub При загрузке формы надписи на кнопках должны поменяться на "Sources.RU" и "Исходники.РУ". Теперь давайте сделаем так, чтобы юзер мог выбрать языки в меню. Для этого добавьте меню mnuLanguage и mnuLang(Index=0). А теперь добавьте FileListBox(Pattern=.ini). Далее пишем код:
Private Sub Form_Load()
On Error Resume Next File1.Path=App.Path & "\language" For i=0 To File.ListCount-1 Load mnuLang(i) mnuLang(i).Caption=File1.List(i) Next End Sub А событие нажатия на меню:
Private Sub mnuLang(Index As Integer)
Call LoadLanguage(App.Path & "\" & mnuLang(Index).Caption) End Sub Вот и все! Теперь вы можете без проблем создать многоязыковое приложение. С уважением, miksayer |
![]() | |
Журнал "Исходники.RU". Copyright (c) 2004 by Исходники.RU. Designed by Mastilior. |