В приложении MMB имеются три вида текстовых значений, которые могут нуждаться в локализации.
1) Собственно Text (aka Caption or Default Text) различных объектов.
2) Текстовая переменная.
3) Всплывающая подсказка (ToolTip).
К сожалению, третий вид (ToolTip) в MMB пока недоступен для локализации при помощи языковых модулей. Языковой модуль является текстовым файлом и по своей структуре напоминает ини-файл. Каждый элемент состоит из идентификатора и значения.
Идентификаторы объектов равны Label этих объектов, а переменных - в виде str (или любого другого обозначения - по желанию) и числовых индексов. Все переменные, которые нуждаются в локализации, выносятся в отдельный скрипт и инициализируются при запуске приложения первым действием. Выглядят они в виде массива переменных str - str$[n]. Это, конечно, не идеальный вариант, но лучшего я пока не нашел. Далее - при запуске программы считывается имя файла нужного модуля (из реестра или ини-файла).
Пример языкового модуля:
TextBTN=Кнопка
Text=Здесь текст - замена дефолтному
str1=Текстовая переменная
str2=Многострочная текстовая переменная:\nПример текста в несколько строк.
Сам скрипт локализации выглядит следующим образом:
Code
lang$='<SrcDir>\Language\rus.lng' - как пример маршрута
linefeed$=CHR(13)+CHR(10)
For i=1 To NOL(lang$)
trans$=StrFromFile(lang$,i,1)
If (POS(=,trans$)) Then
trans$=StrChange(trans$,\n,linefeed$)
count=POS(=,trans$)
len=LEN(trans$)-count+1
txt$=StrDel(trans$,1,count)
label$=StrDel(trans$ ,count,len)
If (POS(str,label$)) Then
pos=POS(str,label$)+3
count2=count-pos
n=VAL(StrCopy(label$,pos,count2))
LoadText("str$[n]","txt$")
Else
LoadText("label$","txt$")
End
End
Next i
Автор - Rush