Çoklu Dil Desteği v2

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
ThE-yLmZ
Üye
Mesajlar: 28
Kayıt: 14 Eki 2005 04:59
İletişim:

Çoklu Dil Desteği v2

Mesaj gönderen ThE-yLmZ »

Merhaba arkadaşlar;

http://www.delphiturkiye.com/index.php?page=mltool.htm

şu sayfada bulunan çoklu dil desteği açıklamasını geliştirmek istiyorum.

2 saat uğraştıktan sonra programımda çoklu dil desteğini yapılandırmış bulunuyorum.

Bunun için ilk önce dil.rc dosyası oluşturup içine;

Kod: Tümünü seç

STRINGTABLE
{ 
100, "Türkçe" 
101, "İşlem Tarihi" 
102, "Makbuz No" 
103, "Kasa İşlemi" 
104, "Cari Hesap" 
105, "C. Hes. Ekle" 
10100, "English"
10101, "Date"
10102, "Number"
10103, "Manage"
10104, "Create"
10105, "Add"
}
Sonra başlat menusunden çalıştır - "cmd" yazıp enter yapıyoruz. Komut satırında "brcc32" yazıp enter yapıyoruz. Eğer size bilgiler geliyorsa Borland Resource Complier Tool yüklü demektir.

rc dosyamızı bu tool ile RES dosyası yapmak zorundayız. Onuda şu şekilde yapıyoruz;
yine komut satırında;

Kod: Tümünü seç

brcc32 c:\dil.rc -32
bunu yaptıktan sonra dil.res dosyası rc dosyasının yanında belirmiş olması lazım. Bu dosyayı projemizin bulunduğu klasör içine atıyoruz.

sonra projemizde bulunan caption özellikli componentlere sırasıyla TAG özelliklerini 100 ile başlıyarak sayı veriyoruz. (Ben 100 ile başladım stringtable hazırlarken. İstediğiniz sayıdan başlıyabilirsiniz, tabi bunun içinde stringtable ona göre yazmanız lazım),, forum1 e 100, label1 e 101 vs.

sonra uses satırına "typinfo" ekliyoruz;
{$R *.dfm} satırının altına {$R dil.res} ekliyoruz;
bununda altına şu prosedürleri eklioyruz;

Kod: Tümünü seç

procedure SetupComponentLanguage(hComponent:TComponent);
var
    hBuffer : Array[1..512] of Char ;
    PropInfo: PPropInfo ;
    lang:integer;
begin
[b]lang:=0;[/b] [color=blue]{bu sayıyı değiştirirseniz dil değişir.}[/color]
    if (hComponent.tag > 0) then begin { is it ready for translation ? }
        PropInfo := GetPropInfo(hComponent.ClassInfo, 'Caption');
        if Assigned(PropInfo) then begin
            LoadString(hInstance, hComponent.tag + (lang * 10000),@hBuffer,sizeof(hBuffer)) ;
            SetStrProp(hComponent,PropInfo,string(hBuffer)) ;
        end;
    end ;
end;


procedure SetupLanguage(hRootComponent: TComponent);
var
    cCount : Integer ;
begin
    for cCount:=0 to hRootComponent.ComponentCount -1 do begin
        if (hRootComponent.Components[cCount].ComponentCount > 0) then begin
            SetupComponentLanguage(hRootComponent) ;
            SetupLanguage(hRootComponent.Components[cCount]);
        end
        else begin
            SetupComponentLanguage(hRootComponent.Components[cCount]) ;
        end ;
    end ;
end ;

en son olarak da formun create eventına

SetupLanguage(Application);
SetupLanguage(self);

ekliyoruz. Lang değişkenini 1 yaparsanız ingilizce, 0 yaparsanız türkçe olur.

özellik olarak stringtable da 100 ile başlıyanlar türkçe 10000 ile başlıyanlar ingilizce olur. Yeni bir dil eklemek isterseniz 20000 ile başlaması gerekir.

Hepinize kolay gelsin,,

yLmZ

Not: Yazı tamamen bana aittir, başka forumlarda ismimin yazılması halinde eklenebilir.
En son ThE-yLmZ tarafından 18 Eki 2005 09:00 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Yazın artık herkese ait. Bu foruma yazı yazarken forum kurallarında olanı kabul etmiş sayılırsın.
Kullanıcı avatarı
ThE-yLmZ
Üye
Mesajlar: 28
Kayıt: 14 Eki 2005 04:59
İletişim:

Mesaj gönderen ThE-yLmZ »

WYSIWYG sonuçta,,

neyse önemli değil, genelde çoğu forumlarda makale olmasa bile bilgilendirme amaçlı çok yazım vardır ve altlarına bunu yazarım. Bu herkesin değil demek değil ki :D sadece başka forumlarda yazarlarsa sadece ismimi yazmalarını rica ettim, bunda kötü bişey yoktur umarım..
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

:) Yok canım kötü birşey değil elbette. Ancak ismini yazıp yazmamak kişiye kalmış. İsterse yazmayabilir demek istedim.
Cevapla