Sıkça Sorulan Sorular

Veritabanı ızgaralarını çevirmek için tüm alanları ilgili veri kümesine ekleyin ve her alanın ekran etiketini çevirmek için TsiLang "Etiketleri Görüntüle" özelliğini kullanın. Izgarada "Sütunlar" özelliğinde "Başlık" alt özelliğini ayarlamayın, alanın "Etiketi Görüntüle" özelliği tarafından üzerine yazılacaktır. Ya da TsiLang'ın Koleksiyonlar özelliğini kullanarak bunları çevirebilirsiniz.

SABİT bölümü için kullandığınız tekniğin aynısını kullanın ve KAYNAK DİZESİ anahtar kelimesini SABİT olarak değiştirin.

Aşağıdaki dize sabiti bildirimi:

const
  constname =
  'stringvariable';

olarak değiştirilmelidir:

const
  constname = 'stringvariable';

InfoPower'ın DBGrid bileşenini çevirmek için: sadece TsiLang'ın "Çok satırlı" özelliğini kullanın ve ızgaranın "Seçili" özelliğini çevirin.

Not: Bu özellik çevirisinde dikkatli olun, tablolama SEKME karakterinin biçimini ve yerlerini koruduğunuzdan emin olun.

Sadece TsiLangs Genişletilmiş Çeviriler özelliğini kullanın. Bu özellik, TsiLang tarafından doğrudan işlenmeyen diğer özellikleri çevirmenize yardımcı olacaktır.

Kaynağa aşağıdaki etiketleri ekleyebilirsiniz: {TSI:IGNORE}{TSI:IGNORE ON},{TSI:IGNORE OFF}{TSI:IGNORE NEXT} ve {TSI:IGNORE VALUE} TsiLang Expert'e bu satırların veya kod bloklarının çeviri için atlanması gerektiğini bildirmek için. Bu etiketlerin ayrıntılı açıklaması için lütfen Kullanıcı Kılavuzunu ve yardım dosyasını kontrol edin.

Sadece 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 için TsiLang'de yeniden uygulanmıştır.

Bu durum yalnızca işletim sistemi ve IDE'nin eski sürümlerini kullanıyorsanız meydana gelebilir. Japonca (veya diğer Batı dışı) yerel ayar desteğini yüklemeniz ve/veya sisteminizin varsayılan yerel ayarını Japonca olarak ayarlamanız gerekebilir. Bunu yapmak için Denetim Masası|Bölgesel Seçenekler|Genel sekmesine gidin. Yerel ayarınızla ilgili onay kutusunun işaretli olduğundan emin olun, ardından ilgili yerel ayarı sistemin varsayılanı olarak ayarlamak için Varsayılanı Ayarla düğmesine basın. 

Ayrıca lütfen aşağıdaki makaleyi kontrol edin: Uzak Doğu Veya Diğer Unicode Dilleri İçin Destek Ekleme

Aşağıdaki geçici çözümü öneriyoruz:

  • Kaynaklardan dize yüklemek için yeni bir işlev bildirin, örneğin:
extern PACKAGE AnsiString __fastcall LoadStr2(int Ident)
{
  TResStringRec ResRec;
  ResRec.module = (long *) &HInstance;
  ResRec.ident = Ident;
  return (LoadResString(&ResRec));
}
  • Tüm birimlerinizdeki LoadtStr() çağrılarını LoadStr2() çağrılarıyla değiştirin.
  • Uygulamanızı derleyin.

  • TsiLang Kaynak Dizilerini İçe Aktarma Sihirbazını çalıştırın (TsiLang Expert'in Araçlar|Sihirbazlar menüsünden edinilebilir) ve yürütülebilir dosyanızdan çevrilmesi gereken tüm dizileri içe aktarın.

  • Tüm bu dizgiler (sihirbazda seçilen) TsiLang'e aktarılacak ve çeviri için kullanılabilir olacaktır.

  • Bu dizeler için çevirileri girin ve projeyi yeniden oluşturun.

Genellikle her TActionClientItem, istemcileri için dize verileri sağlayan ilgili bir TAction'a bağlanır. TsiLang bileşenleri Eylemin Başlık veya İpucu gibi dize özelliklerini korur, böylece Eyleme bağlı tüm görsel kontroller etkin dil değiştirildiğinde güncellenir.

 

Ancak, herhangi bir eylemle bağlantılı olmayan bu TActionClientItem öğeleri, örneğin TActionMainMenuBar üst düzey öğeleri, yayınlanmış dize özelliklerine sahip değildir ve doğrudan işlenemez. Bu tür TActionClientItems için aşağıdaki numarayı öneriyoruz:

 

  1. TAction içermeyen her TActionClientItem için "sahte" bir Eylem oluşturun ve bunları bağlayın. Örneğin, TActionMainMenuBar'ınızda 'Dosya' üst düzey bir menü öğesi varsa, yeni bir eylem FileFile1 oluşturun, .Caption özelliğini 'Dosya' olarak ayarlayın ve bunları bağlayın.
  2. Çeviri Düzenleyicisinde bu Eylem için çeviri verilerini girin.
  3. Bir eylemin olay işleyicisi yoksa kalıcı olarak devre dışı bırakılır, bu nedenle tüm "sahte" eylemlerin OnUpdate olay işleyicisini aşağıdaki gibi prosedüre ayarlayın:
procedure TForm1.FakeActionUpdate(Sender: TObject);
begin
  TAction(Sender).Enabled := True;
end;

Bu durum için bir demo projesi https://www.sicomponents.com/soft/ActionManager.zip adresinden indirilebilir.

Eğer 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 aşağıdakiyle değiştirmeniz gerekir:

StrArr: array[0..2] of PString = (@str1, @str2, @str3);

Ayrıca, koddaki dizinin öğelerine yapılan tüm referanslar, örneğin

...StrArr[Index]...

ile değiştirilmelidir:

...StrArr[Index]^...

Ne yazık ki, bunu yapmanın kolay bir yolu yok. Ancak, örneğin TsiFindDialog'un OnShow etkinliğine böyle bir şey yazarak bunu hackleyebilirsiniz:

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, IntraWeb uygulamalarında TsiLang bileşenlerini normal VCL/FMX uygulamalarında olduğu gibi kullanabilirsiniz. Demo projesi http://www.sicomponents.com/soft/IW_SiLang.zip adresinden indirilebilir.

Aynısı, UniGUI ve diğerleri gibi diğer tüm web çerçeve kitaplıkları için de geçerlidir. TsiLang bileşenleri ile çevrilmiş UniGUI uygulamasının video örneğini Videolar sayfamızdan inceleyebilirsiniz.

Evet, ancak bunun için bazı hileler yapılması gerekiyor. Lütfen ayrıntıları forum gönderimizde bulabilirsiniz...

İki olası durum vardır:

 

  • 3. taraf formları, görünür kullanıcı arayüzü öğeleri için kaynak dizeleri kullanır:

 

Kullanılan kaynak dizelerini TsiLang bileşenine aktarmak için Kaynak Dizeleri İçe Aktarma Sihirbazı'nı kullanmanız yeterlidir. Her bir dil altında görüntülenmek üzere kullanılan 3. taraf formların Yazı Tipi ve Karakter Kümesini kontrol edebilmek için TScreen.OnActiveFormChange etkinliğini kullanabilirsiniz. Örneğin:

TForm1 = class(TForm)  {…}    
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure OnFormChange(Sender: TObject);
{…}
end
;
{…}

procedure
TForm1.FormCreate(Sender: TObject);
begin

Screen.OnActiveFormChange := OnFormChange;
end
;
procedure
TForm1.OnFormChange(Sender: TObject);
begin

if (Screen.ActiveForm <> nil) and (Screen.ActiveForm <> Self) then
Screen.ActiveForm.Font.Assign(Self.Font);
end
;
  • 3rd party forms use hard-coded strings for UI elements:
  • 3. taraf formlar, kullanıcı arayüzü öğeleri için sabit kodlu dizeler kullanır:

TsiLang'ı her bir 3. taraf formuna yerleştirmeniz, bu formu projenize eklemeniz ve projenizden olağan bir form olacak şekilde tercüme etmeniz gerekecektir.

TDBNavigator bileşeninde küçük bir hata var (veya tasarlandığı gibi). Düzeltmek için aşağıdaki örnek kodu kullanabilirsiniz:

procedure TForm1.FormCreate(Sender: TObject);
begin
  DBNavigator1.Hints.CommaText := 
  siLang1.GetStringValue(@siLang1.MultiLines,
  'DBNavigator1.Hints', siLang1.ActiveLanguage);
end;

Bir XP Teması etkinleştirildiğinde, Developer Express bileşenleri, uygulama varsayılan yerel ayarını kullanarak AnsiString'i WideString'e dönüştürür. Dil değiştirme olayında uygulamanın iş parçacığı yerel ayarını değiştirerek bunu düzeltebilirsiniz. Örneğin:

procedure TForm1.siLang1ChangeLanguage(Sender: TObject);
begin
  if siLang1.ActiveLanguage = 1 then
    SetThreadLocale(LANG_ENGLISH)
  else
    SetThreadLocale(LANG_JAPANESE);
end;

SysLocale global değişkeni, Delphi ve C++Builder'ın sonraki sürümlerinde kullanılabilir:

procedure TForm1.FormCreate(Sender: TObject);
begin
  if SysLocale.PriLangID = LANG_ENGLISH then
    siLangDispatcher1.ActiveLanguage := 1
  else if SysLocale.PriLangID = LANG_GERMAN then
    siLangDispatcher1.ActiveLanguage := 2
  else if SysLocale.PriLangID = LANG_FRENCH then
    siLangDispatcher1.ActiveLanguage := 3
  else
    siLangDispatcher1.ActiveLanguage := 1;
end;

Ayrıca işletim sisteminin varsayılan dilini tespit etmek için WinAPI'yi kullanabilirsiniz:

procedure TForm1.FormCreate(Sender: TObject);
var
  LangID: DWORD; 
begin
  LangID := GetUserDefaultLangID; 
  case Byte(LangID and $03FF) of 
    LANG_ENGLISH: siLangDispatcher1.ActiveLanguage := 1; 
    LANG_GERMAN: siLangDispatcher1.ActiveLanguage := 2; 
    LANG_FRENCH: siLangDispatcher1.ActiveLanguage := 3; 
  else
    siLangDispatcher1.ActiveLanguage := 1;
end;

Veya "Kullanıcılar Tarafından Çevrilen Çok Dilli Uygulamalar Oluşturma" başlıklı bu yararlı makaleyi okumayı düşünebilirsiniz.

Bazen, temalar etkinleştirilmiş Windows XP altında, dilleri değiştirdikten sonra ana menünün arka planı beyaz olur. Bu, XP hatası olarak bilinir ve geçici çözüm olarak aşağıdaki gibi kullanılabilir:

  1. Dili değiştirmeden önce Görüntüler özelliğini nil olarak ayarlayın.
  2. Etkin dili değiştirin.
  3. Görüntüler özelliğinin değerini geri yükleyin.

 

Aşağıdaki Delphi kodu bunu göstermektedir:

  MainMenu1.Images := nil; 
  siLangDispatcher.ActiveLanguage := (computed value); 
  MainMenu1.Images := ImageList1; 

Görünüşe göre Delphi 6'ya tüm güncelleme ve hizmet paketlerini yüklememişsiniz. Lütfen mevcut tüm hizmet ve güncelleme paketlerini (RTLUpdate 3 dahil) yükleyin, çünkü TsiLang paketi en son paketlerin tümü yüklenmiş olarak derlenmiştir.

Bu, Delphi ve C++Builder için tek bir pakete sahip olmanın bedeliydi. Yalnızca C++Builder kullanıyorsanız, SI.INC dosyasının ilk satırına {$DEFINE BCB} ekleyerek ve TsiLang paketlerini yeniden oluşturarak bunu düzeltebilirsiniz. Hem Delphi hem de C++Builder kullanmanız gerekiyorsa veya Tam Kaynak sürümüne sahip değilseniz ya da TsiLang paketlerini yeniden oluşturmak istemiyorsanız, siComp.hpp dosyasında bildirilen siLang_Def_UsedInCpp global değişkenini C++ projelerinizde Application->Initialize(); çağrısından hemen sonra true olarak ayarlamanız gerekecektir.

Derlenmiş birimler (DCU) YALNIZCA Win32, Win64, Android, Linux ve OSX platformları için sağlanır. iOS DCU'ları, iOSSimulator hedefi için oluşturulur. Dolayısıyla, projelerinizi iOS hedef platformu için oluşturmanız gerekiyorsa, projenizi TsiLang Components Suite birimlerinin kaynaklarını kullanarak yeniden oluşturmanız gerekecektir.

FMX global koşullu tanımlama, FireMonkey projeleri kapsamında TsiLang birimleri oluşturmak için gereklidir. Önceden derlenmiş TsiLang birimlerini FireMonkey projenize bağlarsanız, bu tanımlama gerekli değildir.

TsiLang Components Suite'in kayıtlı sürümünün Windows Server platformuna yüklenmesi sırasında bir çökme yaşarsanız, lütfen Veri Yürütme Önleme (DEP) işletim sistemi ayarını KAPATIN. DEP, Windows Server platformlarında varsayılan olarak AÇIK'tır ve bu, yükleme sırasında çökmeye neden olabilir.

RAD studio uygulamalarınıza stiller uygulamak için VCL Stillerini kullandığınızda, TsiLang'ın UseTaskDialog özelliğinin True olarak ayarlanması durumunda, TsiLang tarafından görüntülenen mesaj kutularının stili belirlenmez. Bunu önlemek için bu özelliği False olarak ayarlayabilirsiniz.

Ancak, etkin bir uygulama stili olmadığında Görev İletişim Kutusunu temel alan mesaj kutularına sahip olmak isterseniz, aşağıdaki hileyi kullanabilirsiniz:

  1. UseTaskDialog özelliğini varsayılan olarak True şeklinde ayarlayın.
  2. Uygulamanın etkin formu değiştiğinde ( Screen.OnActiveFormChange etkinliğinin içinde), uygulamanın şekillendirilip şekillendirilmediğini kontrol eder ve ardından bu özelliği False olarak ayarlarız.

 

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;

Gönderici bileşeninin FileName özelliğini 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 eklemeniz ve dosya adını TsiLang Expert Dil Seçenekleri altındaki Özel dosya alanında belirtmeniz yeterlidir.

SIB dosyasına bir dilin nasıl ekleneceğine dair adım adım bir kılavuz burada bulunabilir: SIL Editor ile yazılım çevirisi: Adım Adım Kılavuz

© 1998-2024 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. şirketinin ticari markaları ve/veya tescilli ticari markalarıdır.