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:
- 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.
- Çeviri Düzenleyicisinde bu Eylem için çeviri verilerini girin.
- 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);
beginScreen.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:
- Dili değiştirmeden önce Görüntüler özelliğini nil olarak ayarlayın.
- Etkin dili değiştirin.
- 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.
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:
- UseTaskDialog özelliğini varsayılan olarak True şeklinde ayarlayın.
- 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