Потребителски панел
Запомни
Категории
C/C++ (17)
C# (8)
Java (5)
Visual Basic (19)
Delphi/Pascal (11)
Python (4)
Assembly (0)
Други (0)
Facebook
Многоезиков интерфейс | Автор: delphipro | Дата: 17.07.2010


Много от Вас сигурно са се чудили как се прави софтуер на няколко езика и аз преди време се чудих и мислех че е трудно, а се оказа толкова лесно като детска игра:

Ще направя приложение, което е на 3 езика Английски, Български и Френски като ще променям текста в заглавната лента на прозореца, ще се сменя един Label и във формата с името на езика и когато се опитате да изключите приложението ще ви извежда въпрос.
1. Влезте във Visual Studio и създайте нов проект "Windows Form Application" с име "Multilanguage":

2. Променете текста в заглавната лента. Напишете "Multilanguage application".Добавете и един Label във формата(тук ще сложим името на езика) напишете в него "English"


Сега да направим прозореца на Български и Френски за целта маркирайте цялата форма (щракнете на заглавната лента на прозореца един път), от Properties отидете на Language и изберете "Bulgarian (Bulgaria)", след това сменете текста в заглавната лента с "Многоезиково приложение", и сменете текста в Label с "Български" , повторете тези стъпки и за Френския език като от Language този път изберете "French (France)", а за текст на Label напишете "Francais", а за текст в заглавната форма напищете "Interface multilingue"
Ето как изглеждат формите на различни езици:
1. Английски:

2. Български:

3. Френски:


Сега вече идва въпроса как да подкарате програмата на различните езици? Има няколко начина да направите това:
1. Да подавате като аргумент на програмата езика на който да се стартира (това което ние ще направим тук)
2. Да четете информация за езика от конфигурационен файл (което е по-правилно като действие) този файл можете да записвате от програмата и при следващо стартиране програмата да е вече на друг език:

Сега къде трябва да пипнем за да може програмата да тръгне на желан от нас език? Всяка програма писана на C# има един файл Program.cs която отговаря за стартирането на приложението, тъкмо там ще променяме. Ето как изглежда кода преди нашата намеса:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace Multilanguage
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}


А ето как изглежда и променения от мен код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace Multilanguage
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] Args) //Правим програмата да може да получава аргументи
{
if (Args.Length > 0) //Правим проверка дали има въведен аргумент.
{
//Ако има подаден аргумент изпълняваме следното
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(Args[0]); //Подаваме езика на който да се стартира приложението
}
else
{
//Това го слагам само заради коментара. Ако няма аргумент приложението ще тръгне с език по подразбиране в нашия случай Английски.
}

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}


За да тръгне приложението трябва да му подадете като аргумент "BG-bg", за Френски "FR-fr", английския е по подразбиране. Ето как приложението стартирано при мен на трите езика:


Но тук излиза един друг въпрос добре ясно как става да направим формата на различни езици, но как да направим съобщенията да излизат на различен език или надписи в самата форма които не са статични а се променят с действието на програмата.

От Microsoft са помислили и за това. Ето как става:
Добавете към проекта си ресурсен файл
1. Дайте десен бутон върху проекта:


2. Избирате Resources File и преименувате на ResLang.resx натиснете Add:


Попълнете по този начин:


Направете още два ресурсни файла:
1.ResLang.bg.resx - за български

2.ResLang.fr.resx - за френски


Много е важно колоната Name във трите файла да е една и съща!!!

Сега малко настрани от урока ще прихвана изключването на програмата за да мога да изведа съобщението дали да се изключи приложението:
/// <summary>
/// Това е функцията която ще прехващам изключването на програмата
/// </summary>
/// <param name="events"></param>
protected override void OnClosing(System.ComponentModel.CancelEventArgs events)
{
//Извеждам въпрос дали сте сигурен програмата да се изключи на различни езици
//Ако натиснете "Yes", ще изключи приложението, в противен случай няма да го изключи
if (MessageBox.Show(ResLang.QuestionText, ResLang.QuestionCaption, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
{
Application.Exit();
}
else
{
events.Cancel = true;
}
}


Ето как изглежда програмата на различни езици със съобщенията за изключване:


Моля не копирайте този урок другаде без моето изрично съгласие!

           


Беше ли Ви от полза урокът?
да не




Искате да пишете коментари? Влезте от тук или се регистрирайте!



Коментари (2):

От Evanescence на 18.07.2010 в 01:44 часа

Браво , добра работа.

От programmer на 10.09.2010 в 18:05 часа

много подробно брави wink