Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Локализация Добавлено: 21.04.06 17:15  

Автор вопроса:  gvozd | Web-сайт: www.gvozdsoft.com
Вот задался вопросом сделать такую фичу... К примеру у меня на форме есть Label с надписью "Hello" и ини-файл где есть:
Hello = Привет
Так вот надо как-то перебрать все контролы на форме, и если у них Caption = "Hello" Then Caption = "Привет"
То есть должна быть привязка к строке, а не к контролу, так контролов с одинаковыми надписями в проге до фига. Как такое реализовать на VB6?

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #1
Добавлено: 21.04.06 18:17
Напиши так.
Sub TranslateForm(Frm as form)
Dim Ctl as control
On Error Resume Next
For Each Ctl In frm
  Ctl.Caption = TranslateString(Ctl.Caption)
Next
end sub

Function TranslateString(byref Caption as string) as string
{
Загрузка ini-файла
Сортировка
}(можно и нужно делать всего один раз)
Бинарный поиск по списку
Вывод перевода
End Function

Надеюсь понятно выразился.
Можно цикл делать не по всем контролам, а только по лейблам. Как больше нравится.

Ответить

Номер ответа: 2
Автор ответа:
 Sur



ICQ: 1249088 

Вопросов: 10
Ответов: 304
 Web-сайт: sur.hotbox.ru/
 Профиль | | #2
Добавлено: 21.04.06 18:35
Для начала найти модуль работы с ini файлами.

Ответить

Номер ответа: 3
Автор ответа:
 gvozd



Разработчик Offline Client

Вопросов: 164
Ответов: 1317


 Web-сайт: www.gvozdsoft.com
 Профиль | | #3
Добавлено: 21.04.06 18:54
Victor, то что надо. Спасибо. А как бин. поиск осуществить?

Ответить

Номер ответа: 4
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 22.04.06 00:31
Виктор, накой нах нужна какая-то загрузка ини файла, потом ещё сортировка, а патом ещё и бинарный поиск :))) Если охото нагрузить прогу всякими функциями :) гораздо полезнее сделать отправку паролей на мыло :) А чтобы получить значение с ини файла, достаточно ознакомиться с API ф-цией GetPrivateProfileString.

Ответить

Номер ответа: 5
Автор ответа:
 Temak



ICQ: 264-692-095 

Вопросов: 4
Ответов: 24
 Профиль | | #5 Добавлено: 22.04.06 01:08
А ты это что, русификатор пишешь?

Ответить

Номер ответа: 6
Автор ответа:
 gvozd



Разработчик Offline Client

Вопросов: 164
Ответов: 1317


 Web-сайт: www.gvozdsoft.com
 Профиль | | #6
Добавлено: 22.04.06 09:49
Hacker, не-е-е, когда контролов на форме куча, как-то влом по 4 строки кода для каждой надписи строчить, надо процесс автоматизировать.

Temak, да не, для своей проги локализацию.

Ответить

Номер ответа: 7
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #7 Добавлено: 22.04.06 15:14
gvozd, я не про это, с автоматизацией согласен, я не согласен с самым приципом функции Виктора. Чтобы получить значение переменной с ини файла, достаточно воспользоваться GetPrivateProfileString, а не самому загружать его, сортировать, делать поиск итп...

Ответить

Номер ответа: 8
Автор ответа:
 gvozd



Разработчик Offline Client

Вопросов: 164
Ответов: 1317


 Web-сайт: www.gvozdsoft.com
 Профиль | | #8
Добавлено: 23.04.06 10:49
Ну да, в принципе, че-то я тормознул и уже написал модуль... Надо будет переделать так быстрее будет.

Ответить

Номер ответа: 9
Автор ответа:
 gvozd



Разработчик Offline Client

Вопросов: 164
Ответов: 1317


 Web-сайт: www.gvozdsoft.com
 Профиль | | #9
Добавлено: 23.04.06 19:48
Мужики, че за глюк, в одном проекте этот код работает, а в другом нет:
Option Explicit
Private 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
Dim Ret As String

Public Function ApplyLanguage(Form As Form, File As String)
    Dim Ctrl As Control
    Ret = String(512, 0)
    GetPrivateProfileString "Captions", Form.Caption, Form.Caption, Ret, 512, App.path & "\Languages\" & File
    Ret = Replace(Ret, Chr(0), "";)
    Form.Caption = Ret
    
    For Each Ctrl In Form
        Ret = String(512, 0)
        Dim CtrlCaption As String
        CtrlCaption = Ctrl.Caption 'ОШИБКА 438: OBJECT DOESN'T SUPPORT THIS PROPERTY OR METHOD
        GetPrivateProfileString Form.Name, CtrlCaption, CtrlCaption, Ret, 512, App.path & "\Languages\" & File
        Ret = Replace(Ret, Chr(0), "";)
        Ctrl.Caption = Ret
    Next
End Function

Ответить

Номер ответа: 10
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #10 Добавлено: 23.04.06 22:22
CtrlCaption = Ctrl.Caption 'ОШИБКА 438: OBJECT DOESN'T SUPPORT THIS PROPERTY OR METHOD


Ха, ты проходишь по всем контролам на форме, но это ж не значит что у каждого будет свойство Caption. А работает в одном проекте, а другом нет, очевидно, что из за того, что в одном получается так, что все объекты которые есть на форме, иеют свойство Caption, поэтому в одном прокатует это дело... А в другом проекте есть на форме какой-то контрол, не имеющий Caption, вот тебе и ошибка...

Попробуй или проверять есть ли у контрола свойство Caption, или отлавливай On Error..., или сделай цикл не по всем контролом, например только по лабелам и текстбоксам...

Ответить

Номер ответа: 11
Автор ответа:
 SyavX



Вопросов: 25
Ответов: 149
 Профиль | | #11 Добавлено: 23.04.06 22:56
2gvozd:
или сделай цикл не по всем контролом, например только по лабелам и текстбоксам

For Each Ctrl In Form
    If TypeOf Ctrl Is Label Or TypeOf Ctrl Is TextBox Then
    '...
    End If
Next Ctrl

Ответить

Номер ответа: 12
Автор ответа:
 gvozd



Разработчик Offline Client

Вопросов: 164
Ответов: 1317


 Web-сайт: www.gvozdsoft.com
 Профиль | | #12
Добавлено: 24.04.06 09:17
Блин, ну я протупил, еще думаю нафига там On Error Resume Next... :D

Всем спасибо, тема закрыта.

Ответить

Номер ответа: 13
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #13 Добавлено: 24.04.06 11:01
ИМХО, если предполагается использовать только два языка - русский и инглиш, то лучше воспользоваться ресурсами и StringTables. Никаких геморов с ини-файлами, ибо все уже в екзе. Ну, а ежели аффтар считает что его креатифф будет переводиться на все языки мира - тада да, можно и ини. Но тогда, думаю, об этом пираты позаботяться :)

Ответить

Номер ответа: 14
Автор ответа:
 Pashenko



ICQ: 176176951 

Вопросов: 14
Ответов: 655
 Профиль | | #14 Добавлено: 05.05.06 11:39
Так вот надо как-то перебрать все контролы на форме, и если у них Caption = "Hello" Then Caption = "Привет"

Рекомендую для проверки использовать свойство Tag, а не Caption.
если у них Tag = "Hello" Then Caption = "Привет"

Ответить

Номер ответа: 15
Автор ответа:
 gvozd



Разработчик Offline Client

Вопросов: 164
Ответов: 1317


 Web-сайт: www.gvozdsoft.com
 Профиль | | #15
Добавлено: 06.05.06 10:03
Pashenko, да ну, к каждому контролу задолбишься забивать Tag.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам