toizy | Дата: Пятница, 06 Апреля 2007, 09:19 | Сообщение # 1 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| В приложении 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 |
Жизнь оказалась не такой уж и забавной, как поначалу...
Сообщение отредактировал toizy - Пятница, 06 Апреля 2007, 09:21 |
|
| |