Veritabanı gridlerini çevirmek için ilgili veri kümesine tüm alanları ekleyin ve her alanın görüntülenen etiketini çevirmek için TsiLang’ın “DisplayLabels” özelliğini kullanın. Gridin “Columns” özelliğinde “Title” alt özelliğini ayarlamayın; alanın “DisplayLabel” özelliği tarafından üzerine yazılır. Veya bunları TsiLang’ın Collections özelliğini kullanarak da çevirebilirsiniz.
CONST bölümü için kullanılan tekniğin aynısını kullanın ve RESOURCESTRING anahtar sözcüğünü CONST olarak değiştirin.
Aşağıdaki dize sabiti bildirimi:
const
constname =
'stringvariable';
şu şekilde değiştirilmelidir:
const
constname = 'stringvariable';InfoPower’ın DBGrid bileşenini çevirmek için TsiLang’ın “Multilines” özelliğini kullanın ve gridin “Selected” özelliğini çevirin.
Not: Bu özelliği çevirirken dikkatli olun; biçimi ve sekme TAB karakterlerinin yerlerini koruduğunuzdan emin olun.
TsiLang’ın ExtendedTranslations özelliğini kullanın. Bu özellik, TsiLang tarafından doğrudan işlenmeyen diğer tüm özellikleri çevirmenize yardımcı olur.
TsiLang Expert’e bu satırların veya kod bloklarının çeviri için atlanması gerektiğini bildirmek üzere kaynak koda şu etiketleri ekleyebilirsiniz: {TSI:IGNORE}, {TSI:IGNORE ON},{TSI:IGNORE OFF}, {TSI:IGNORE NEXT} ve {TSI:IGNORE VALUE}. Bu etiketlerin ayrıntılı açıklaması için lütfen Kullanım Kılavuzuna ve yardım dosyasına bakın.
TsiLang bileşenlerinin ilgili yöntemlerini kullanın. MessageDlg(), ShowMessage(), InputBox() gibi tüm standart iletişim kutusu işlevleri, uluslararasılaştırma desteği sağlamak üzere TsiLang içinde yeniden uygulanmıştır.
Bu yalnızca işletim sisteminin ve IDE’nin eski sürümlerini kullanıyorsanız olabilir. Japonca (veya diğer Batılı olmayan) yerel ayar desteğini yüklemeniz ve/veya sisteminizin varsayılan yerel ayarını Japonca olarak ayarlamanız gerekebilir. Bunun için Control Panel|Regional Options|General sekmesine gidin. Yerel ayarınızla ilgili onay kutusunun işaretli olduğundan emin olun, ardından ilgili yerel ayarı sistem varsayılanı yapmak için Set Default düğmesine tıklayın.
Ayrıca lütfen şu makaleye de bakın: https://www.tsilang.com/tr/support-for-unicode-languages/
Şu geçici çözümü öneriyoruz:
externPACKAGE AnsiString__fastcallLoadStr2(intIdent) { TResStringRec ResRec; ResRec.module = (long*) &HInstance; ResRec.ident = Ident;return(LoadResString(&ResRec)); }
Uygulamanızı derleyin.
TsiLang Resource Strings Import Wizard öğesini çalıştırın (TsiLang Expert’in Tools|Wizards menüsünde bulunur) ve çevrilmesi gereken tüm dizeleri çalıştırılabilir dosyanızdan içe aktarın.
Sihirbazda seçilen tüm bu dizeler TsiLang’a aktarılır ve çeviri için kullanılabilir hale gelir.
Bu dizelerin çevirilerini girin ve projeyi yeniden derleyin.
Genellikle her TActionClientItem, istemcileri için dize verisi sağlayan ilgili bir TAction’a bağlıdır. TsiLang bileşenleri, Action’ın Caption veya Hint gibi dize özelliklerini yönetir; böylece etkin dil değiştirildiğinde Action’a bağlı tüm görsel denetimler güncellenir.
Ancak herhangi bir eyleme bağlı olmayan TActionClientItem öğelerinin, örneğin TActionMainMenuBar’ın üst düzey öğelerinin, yayımlanmış dize özellikleri yoktur ve doğrudan işlenemez. Bu tür TActionClientItem öğeleri için şu yöntemi öneririz:
procedure TForm1.FakeActionUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := True;
end;
Bu durum için bir demo projesi şuradan indirilebilir: https://www.sicomponents.com/soft/ActionManager.zip
Aşağıdaki gibi veri yapıları kullanıyorsanız:
const str1 = 'My String constant 1'; str2 = 'My String constant 2'; str3 = 'My String constant 3'; StrArr: array[0..2] of string = (str1, str2, str3);
StrArr bildirimini şununla değiştirmeniz gerekir:
StrArr: array[0..2] of PString = (@str1, @str2, @str3);
Ayrıca koddaki dizi öğelerine yapılan tüm başvurular, örneğin
...StrArr[Index]...
şununla değiştirilmelidir:
...StrArr[Index]^...
Maalesef bunu yapmanın kolay bir yolu yok. Ancak örneğin TsiFindDialog bileşeninin OnShow olayında şuna benzer bir şey yazarak bunu hack edebilirsiniz:
procedure TForm1.siFindDialog1Show(Sender: TObject);
var
hnd: THandle;
R: TRect;
begin
with siFindDialog1 do
begin
if (siLang = nil) or (siLang.Language <> 'Dutch') then
Exit;
GetWindowRect(Handle, R);
SetWindowPos(Handle, 0, 0, 0, R.Right - R.Left + 26, R.Bottom - R.Top, SWP_NOMOVE or SWP_NOZORDER);
hnd := GetDlgItem(Handle, 1);
SetWindowPos(hnd, 0, 0, 0, 100, 23, SWP_NOMOVE or SWP_NOZORDER);
hnd := GetDlgItem(Handle, IDCANCEL);
SetWindowPos(hnd, 0, 0, 0, 100, 23, SWP_NOMOVE or SWP_NOZORDER);
end;
end;
Evet, TsiLang bileşenlerini IntraWeb uygulamalarında olağan VCL/FMX uygulamalarındaki gibi kullanabilirsiniz. Demo projesi şuradan indirilebilir: http://www.sicomponents.com/soft/IW_SiLang.zip
Aynısı UniGUI ve benzeri diğer web çerçevesi kütüphaneleri için de geçerlidir. TsiLang bileşenleriyle çevrilmiş bir UniGUI uygulamasının video örneğini Videolar sayfamızda görebilirsiniz.
Evet, ancak bunun için bazı püf noktaları gerekir. Ayrıntıları forum gönderimizde… bulabilirsiniz.
İki olası durum vardır:
Kullanılan kaynak dizelerini TsiLang bileşenine aktarmak için Resource Strings Import Wizard öğesini kullanmanız yeterlidir. Üçüncü taraf formların her dilde görüntülenmek için kullandığı Font ve Charset değerlerini denetleyebilmek için TScreen.OnActiveFormChange olayını kullanabilirsiniz. Örneğin:
TForm1 =class(TForm){…}procedureFormCreate(Sender: TObject);private{ Private declarations }procedureOnFormChange(Sender: TObject);{…}
end;
{…}procedureTForm1.FormCreate(Sender: TObject);
beginScreen.OnActiveFormChange := OnFormChange;end;procedureTForm1.OnFormChange(Sender: TObject);beginif(Screen.ActiveForm <>nil)and(Screen.ActiveForm <> Self)thenScreen.ActiveForm.Font.Assign(Self.Font);end;
Her üçüncü taraf forma TsiLang yerleştirmeniz, bu formu projenize eklemeniz ve projenizdeki olağan bir form gibi çevirmeniz gerekir.
TDBNavigator bileşeninde küçük bir hata (veya tasarım gereği davranış) var. Bunu düzeltmek için şu örnek kodu kullanabilirsiniz:
procedureTForm1.FormCreate(Sender: TObject);beginDBNavigator1.Hints.CommaText := siLang1.GetStringValue(@siLang1.MultiLines, 'DBNavigator1.Hints', siLang1.ActiveLanguage);end;
XP Theme etkinken Developer Express bileşenleri, AnsiString değerini uygulamanın varsayılan yerel ayarını kullanarak WideString değerine dönüştürür. Bunu, dil değişikliği olayında uygulamanın iş parçacığı yerel ayarını değiştirerek düzeltebilirsiniz. Örneğin:
procedureTForm1.siLang1ChangeLanguage(Sender: TObject);beginifsiLang1.ActiveLanguage = 1thenSetThreadLocale(LANG_ENGLISH)elseSetThreadLocale(LANG_JAPANESE);end;
SysLocale global değişkeni Delphi ve C++Builder’ın daha yeni sürümlerinde kullanılabilir:
procedureTForm1.FormCreate(Sender: TObject);beginifSysLocale.PriLangID = LANG_ENGLISHthensiLangDispatcher1.ActiveLanguage := 1elseifSysLocale.PriLangID = LANG_GERMANthensiLangDispatcher1.ActiveLanguage := 2elseifSysLocale.PriLangID = LANG_FRENCHthensiLangDispatcher1.ActiveLanguage := 3elsesiLangDispatcher1.ActiveLanguage := 1;end;
İşletim sisteminin varsayılan dilini algılamak için WinAPI’yi de kullanabilirsiniz:
procedureTForm1.FormCreate(Sender: TObject);varLangID: DWORD;beginLangID := GetUserDefaultLangID;caseByte(LangIDand$03FF)ofLANG_ENGLISH: siLangDispatcher1.ActiveLanguage := 1; LANG_GERMAN: siLangDispatcher1.ActiveLanguage := 2; LANG_FRENCH: siLangDispatcher1.ActiveLanguage := 3;elsesiLangDispatcher1.ActiveLanguage := 1;end;
Ya da şu faydalı makaleyi okumayı düşünebilirsiniz: “Kullanıcılar Tarafından Çevrilen Çok Dilli Uygulamalar Oluşturma“.
Bazen, temaların etkin olduğu Windows XP altında, dil değiştirildikten sonra ana menünün arka planı beyaz olur. Bu, XP hatası olarak bilinir ve geçici çözüm olarak şu yol izlenebilir:
Aşağıdaki Delphi kodu bunu göstermektedir:
MainMenu1.Images :=nil; siLangDispatcher.ActiveLanguage :=(computed value); MainMenu1.Images := ImageList1;
Delphi 6’ya tüm güncelleme ve servis paketlerini kurmamışsınız gibi görünüyor. TsiLang paketi en son paketlerin tümü kurulu olarak derlendiği için lütfen mevcut tüm servis ve güncelleme paketlerini (RTLUpdate 3 dahil) kurun.
Delphi ve C++Builder için tek bir paket sunabilmenin bedeli buydu. Yalnızca C++Builder kullanıyorsanız SI.INC dosyasının ilk satırına {$DEFINE BCB} ekleyip TsiLang paketlerini yeniden derleyerek bunu düzeltebilirsiniz. Hem Delphi hem de C++Builder kullanmanız gerekiyorsa, Full Source sürümüne sahip değilseniz veya TsiLang paketlerini yeniden derlemek istemiyorsanız C++ projelerinizde Application->Initialize(); çağrısından hemen sonra siComp.hpp içinde bildirilen siLang_Def_UsedInCpp global değişkenini true olarak ayarlamanız gerekir.
Derlenmiş birimler (DCU) yalnızca Win32, Win64, Android, Linux ve OSX platformları için sağlanır. iOS DCU’ları iOSSimulator hedefi için üretilir. Bu nedenle projelerinizi iOS hedef platformu için derlemeniz gerekiyorsa projenizi TsiLang Components Suite birimlerinin kaynaklarını kullanarak yeniden derlemeniz gerekir.
TsiLang Components Suite’in kayıtlı sürümünü Windows Server platformunda kurarken çökme yaşarsanız, lütfen işletim sisteminin Data Execution Prevention (DEP) ayarını OFF yapın. DEP, Windows Server platformlarında varsayılan olarak ON durumundadır ve bu, kurulum sırasında çökmeye neden olabilir.
RAD Studio uygulamalarınıza stil uygulamak için VCL Styles kullandığınızda, TsiLang’ın UseTaskDialog özelliği True olarak ayarlıysa TsiLang tarafından görüntülenen mesaj kutuları stillenmez. Bunu önlemek için bu özelliği False olarak ayarlamanız yeterlidir.
Ancak etkin bir uygulama stili olmadığında Task Dialog tabanlı mesaj kutuları kullanmak istiyorsanız şu yöntemi kullanabilirsiniz:
Aşağıdaki kod örneği bunu göstermektedir:
procedure TForm1.ScreenFormChange(Sender: TObject); procedure ProcessActiveForm(AForm: TCustomForm); var I: Integer; begin for I := 0 to AForm.ComponentCount - 1 do if AForm.Components[I] is TsiCustomLang then begin TsiCustomLang(AForm.Components[I]).UseTaskMsgDlg := StyleServices(AForm).IsSystemStyle; Exit; end; end; begin if Screen.ActiveCustomForm <> nil then ProcessActiveForm(Screen.ActiveCustomForm); end;
Dispatcher bileşeninin FileName özelliğine değer atamanız ve LoadAllFromFile() yöntemini çağırmanız yeterlidir:
procedure TForm1.FormCreate(Sender: TObject);
begin
siLangDispatcher1.FileName := "YourSILorSIBFileName.SIL";
siLangDispatcher1.LoadAllFromFile(siLangDispatcher1.FileName);
end;TsiLang Components Suite’i çevirmek için dilinizi tsilang_translations.sib dosyasına ekleyin ve dosya adını TsiLang Expert Language Options altındaki Custom file alanına girin.
SIB dosyasına dil eklemeye ilişkin adım adım bir kılavuzu burada bulabilirsiniz: Translate software with SIL Editor: A Step-by-Step Guide
Kaydet iletişim kutusunun Options değerinde ofOverwritePrompt bulunduğunda, "<file> already exists. Do you want to replace it?" sorusu Windows tarafından, "Confirm Save As" başlıklı bir sistem mesaj kutusu olarak gösterilir. TsiLang bunu çeviremez. Soruyu program dilinizde göstermek için Options içinden ofOverwritePrompt değerini kaldırın ve soruyu iletişim kutusunun OnCanClose olayında kendiniz sorun:
procedure TForm1.siSaveDialog1CanClose(Sender: TObject; var CanClose: Boolean);
begin
CanClose := not FileExists(siSaveDialog1.FileName) or
(siLang1.MessageDlg(Format(SOverwriteQuestion, [siSaveDialog1.FileName]),
mtConfirmation, [mbYes, mbNo], 0) = mrYes);
end;
SOverwriteQuestion sizin kendi dizenizdir, örneğin '%s already exists. Do you want to replace it?'. Programınızın geri kalanıyla birlikte çevrilmesi için bunu diğer dizeler gibi TsiLang bileşeninde tutun.
Lütfen ofOldStyleDialog seçeneğiyle VCL’nin OnCanClose olayını çağırmadığını unutmayın; bu nedenle bu yöntem yalnızca varsayılan iletişim kutusu stilinde çalışır.
Aradığınız yanıtı bulamadınız mı? Forumda sorun veya bize ulaşın.
Uygulamanızın bir sonraki dili burada başlıyor
Her özelliği kendi projenizle deneyin.
Tam işlevli deneme sürümü. Yerelleştirilmiş uygulamanız çalışırken IDE’nizi açık tutun.
Öğrenin & bağlantı kurun
© 1998-2026 Igor Siticov, SiComponents. TsiLang®, Resource Builder® ve SiComponents®, Igor Siticov’un tescilli ticari markalarıdır.
RAD Studio, Delphi ve C++Builder, Embarcadero Technologies, Inc.’in ticari markaları ve/veya tescilli ticari markalarıdır.