ИД "Мой компьютер"   "Игроград"   "Реальность фантастики"   Ассамблея "Портал"
Сделать стартовой   

 
Домашняя страница
Расширенный поиск
E-mail

 

N 16 (447)




МОЙ КОМПЬЮТЕР




  Новости:

 
МК
Украина
Игры
Интернет
Железо
Софт
Пресс-релизы

  Статьи:

 
Уголок читателя
Прочее
Имеющий уши
Программирование
Интернет
Железо
Софт
Игры


 
КОНКУРСЫ



Правила конкурсов

Конкурс "АВЧ"

Рейтинг победителей


ОПРОС

Вы посещаете нас:
первый раз
1-2 раза в месяц
1-2 раза в неделю
1-2 раза в день
более 2-х раз в день Что привело Вас к нам?
поиск информации
интерес к статьям
интерес к новостям
любопытство
реклама
другое








боулинг

ads.mycomputer.ua

ads.mycomputer.ua

ads.mycomputer.ua

ads.mycomputer.ua

ads.mycomputer.ua













Argumentum ad ignorantiam!

 

статьи
Программирование



 

Прочее  
Visual basic  
Delphi  
C++  
Интернет приложения  
Теория  




    Visual basic


Мовне питання

Сергій ВОВК
N 8 (439) 04.03.2007


Більшість програмістів-початківців оздоблюють свої програми лише однією мовою інтерфейсу. Вони вважають, що писати програму під дві або більше мов важко і громіздко. Але тим самим вони звужують коло своїх користувачів.

Якщо ж підійти до питання системно, нічого складного тут немає. Робити багатомовний інтерфейс (БМІ) — це просто, доречно і модно! У цій статті буде розглянуто один із варіантів вирішення цього питання. В якості мови програмування буде використовуватися Visual Basic 6.0, однак сам принцип, маючи деякий досвід, можна застосувати таож і для інших мов.

Мовне питання

Трохи теорії…

Щоби в інтерфейсі автоматично підставлялися слова з вибраної мови, потрібно у коді працювати не прямо зі стрічками, а з числовими ідентифікаторами стрічок. Ідентифікатори та їхні значення стрічок для кожної мови потрібно записувати та зберігати в окремій базі даних (БД).

Наприклад, замість того щоби писати у код:

Записують:

Знайшовши у БД ідентифікатор 102, функція GetStr поверне потрібну стрічку (в залежності від того, яка мова інтерфейсу зараз вибрана) та передасть її в MsgBox.

Крім того, замість того щоб писати надписи у об’єктах безпосередньо у формах (форма — так називається вікно у VB), треба у стартовій підпрограмі форми програмно записувати список об’єктів та ідентифікатори через спеціальну підпрограму SetCaptions, яка буде описана пізніше. Наприклад:

SetCaptions сама призначає надписи для кожного об’єкта.

Трохи про БД стрічок…

Формат БД може бути найрізноманітніший. Це може бути внутрішній ресурс .exe/.dll-файлу, Access/Excel-таблиця, .ini-файл, або, частіше всього, звичайний текстовий файл.

Будемо використовувати БД у вигляді саме звичайного текстового файлу. Так легше записувати ідентифікатори та стрічки, використовуючи простий текстовий редактор. Та й швидкість завантаження лишається високою.

Ідентифікатори та стрічки будуть зберігатися в текстовому файлі з іменем, наприклад, langdefs.dat, який повинен перебувати в одному каталозі з програмою. У першій стрічці файлу через символ «/» надоється список доступних мов. Далі ідуть записи числових ідентифікаторів та відповідні значення стрічок для кожної мови. Записи розділені між собою порожньою стрічкою. Такий спосіб дуже зручний та наочний, особливо для довгих стрічок та цілих речень. Крім того, у користувача програми є можливість самому добавити мову.

Приклад змісту такого файлу БД:

Практика

Перше що треба зробити — визначити глобальний масив, який зберігатиме стрічки вибраної мови після ініціалізації БМІ:

N — потрібно замінити числом, яке повинно бути більшим за кількість ресурсів стрічок у мовному файлі langdefs.dat. Для невеличкої програми вистачить 100, для середньої — 1000, і т.д. Індекс масиву — це і буде ідентифікатор стрічки. Не треба хвилюватися, що деякі елементи масиву лишаться порожніми — це дуже мало в порівнянні з тим, скільки займає сам процес програми в оперативній пам’яті.

Далі потрібно записати підпрограму InitLangInterface, яка з мовного файлу завантажує в масив стрічки вибраної мови:

У підпрограму InitLangInterface у параметр iLangNumber передаємо порядковий номер мови, починаючи з нуля, яку потрібно завантажити. InitLangInterface потрібно викликати при старті програми, а також після зміни мови інтерфейсу.

Далі записуємо функцію GetStr для зручного доступу до масиву StrDefs.

Якщо у визначенні стрічки зустрічається спеціальна ключова підстрічка /R\, то вона автоматично замінюється на символ переводу стрічки Chr(13) (константа vbCr). Це корисно, коли стрічку потрібно вивести у вигляді декілька стрічок. Це схоже на дію спеціального символу \n у мові C/C++.

Наприклад, десь треба зробити такий надпис:

Для цього строковий ресурс під ідентифікатором 312 достатньо записати як:

(У прикладі використовується дві мови: англійська/українська. Поточна мова вибрана як українська)

Тепер запишемо підпрограму SetCaptions для зручного надання надписів на об’єктів форми. Приклад застосування вже було показано вище. У підпрограму через функцію Array передаємо список об’єктів та ідентифікатори стрічок:

Ще одна корисна функція яка вертає назву мови з її порядкового номера:

Отримати список доступних мов можна кодом:

Тестова програма

Тепер напишемо невеличку програму з багатомовним інтерфейсом, яка буде знаходити суму двох чисел. Запускаємо Visual Basic, створюємо нову програму, головну форму називаємо frmMain. Далі візуально добавимо на форму наступні об’єкти (та відповідно їх назвемо):

• випадаючий список мов (ComboBox) — надамо ім’я cmbInterfaceLanguage;

• чотири надписи (Label) — LabInterfaceLang (біля списку мов); lab1 та lab2 (біля полів для вводу чисел); labResult; labDescription (внизу форми);

• текстові поля (TextBox) для вводу чисел — txt1 та txt2;

• кнопку «Вихід» — butExit.

У властивостях надпису labResult можна увімкнути рамку. Цей надпис відображатиме результат суми.

У код форми записуємо такий текст:

В кінець коду форми добавимо підпрограми/функції БМІ, які були описані вище, в тому числі і допоміжні.

Створимо новий каталог і збережемо туди проект нашої програми. У цьому же каталозі створимо текстовий файл langdefs.dat з таким змістом:

І нарешті запускаємо програму та насолоджуємось отриманим результатом ( мал. 1).







Расширенный поиск 
 

О проекте  Рекламодателям  Карта сайта  Контакт  Обратная связь 

© ИД "Мой компьютер"®, 1998-2004