Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Çok dilli program desteği öneri
#1
Bir masaüstü veri tabanı uygulama için çok dilli destek eklemek istiyorum.

Bu konuda tecrübesi olan arkadaşların önerileri nelerdir. Bir çok şekilde yapılabilir fakat en doğrusu mantıklı olanı nasıldır.

Zaman içinde programda geliştirme yapılacak ve dil dosyasıda buna (eklemelere/güncelleştirilmelere) paralel olarak güncellenecektir.

Benim aklıma gelen seçenekler aşağıda. Varsa önerileriniz onlarıda dinleyebilirim
Seçenekler
1. XML File
2. ini File
3. Database içinde tutma

Tabi dosya içinde tutulduğunda programda güncelleme yapılması durumunda bununda güncellemesi olacak.
PostgreSQL - Linux - Delphi, Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla
#2
(03-06-2018, Saat: 02:46)3ddark Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Bir masaüstü veri tabanı uygulama için çok dilli destek eklemek istiyorum.

Bu konuda tecrübesi olan arkadaşların önerileri nelerdir. Bir çok şekilde yapılabilir fakat en doğrusu mantıklı olanı nasıldır.

Zaman içinde programda geliştirme yapılacak ve dil dosyasıda buna (eklemelere/güncelleştirilmelere) paralel olarak güncellenecektir.

Benim aklıma gelen seçenekler aşağıda. Varsa önerileriniz onlarıda dinleyebilirim
Seçenekler
1. XML File
2. ini File
3. Database içinde tutma

Tabi dosya içinde tutulduğunda programda güncelleme yapılması durumunda bununda güncellemesi olacak.

Tsilang bileşeni mevcut inceleyebilirsiniz. Ini dosyası bu bileşenden sonra tercihimdir. Database içi herhangi bir sorunda verilerin üstüne dilde gitmesin Smile
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#3
Bir framework yapıyorum ve lisans sorunu olmayan çözümlerle ilerlemek istiyorum. İleride linkini de vereceğim. Github üzerinde. Bu nedenle mümkün mertebe ekstra bileşen olmadan devam ediyorum.
PostgreSQL - Linux - Delphi, Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla
#4
Merhaba,
FMX mimarisinde TLang nesnesi ile çok dilli uygulamalar geliştirilebiliyor.
Bu nesne yapısını inceleyecek VCL için benzer bir metod üretebilirsiniz.
Çözümü dört gözle bekliyoruz.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#5
Bunun için bir lib yazmıştım kendisine verilen nesneyi tüm alt kırılımlarına kadar tarayarak çevirme işlemi yapıyordum. Verileri Devexpress dxmemdataset ile .dat şeklinde tutmuştum.
Cevapla
#6
Ben RTTI ile Caption özelliklerini yakalayıp bunları çeviriyorum ve şimdilik yeterli gözüküyor. Ayrıca bilgileri de db'de saklıyorum. 

Asıl mevzu bence uygulamanızdaki lookup (combo vs.) bilgiler, mesaj diyaloglar, hata pencereleri vs.'de multi language olmalı. O yüzden yapınız/tasarımınız ne kadar esnek olursa, en az uğraşı ile en çok işi yapabilirsiniz. Başarılar
Cevapla
#7
Merhaba.

Siz çözümlerinizi üretmişsiniz tebrikler, ancak bu başlığı okuyan konunun meraklıları için de bir çıkış noktası sunabilmek için projelerinizde kullandığınız bileşenler ile sınırlandırılmış bir çözüm,  en basit haliyle bir kod ile örnekleyeyim.  Idea

Aşağıdaki kod bu başlıktaki talebi direkt yerine getirmiyor sadece bir yol çiziyor.

Parametre olarak belirttiğiniz TForm üzerindeki bileşenleri NAME properylerini okur ve bir ListBox'a yazar.

ListBox'a eklenen kısımlara dikkat ederseniz her bir Bileşen Sınıfına özel bir CASE başlığı denk geliyor. ( 0, 1, 2, 3 ile başlayanlar Array içindeki ilgili sınıfın index nosudur. )  Idea

Buralara BEGIN / END bloğu açarak denk gelen ilgili bileşen sınıfına özel ( TLabel ise Caption, TEdit ise Text property vb.) dil metni ataması, renk, font ve style değişikliği de yapılabilir. Böylece bir DİL çözümünün ötesinde bir TEMA çözümü olarak da düşünebilirsiniz. Smile

Dil metnini de bir INI, XML dosyası veya Veritabanı üzerinden Bileşen NAME/TAG vb. referanslı okunan değerlerin alınması ile sonuca ulaşılabilir.

Combo'lar garanti ancak MessageDlg(lar)ın içeriklerini de visible özelliği FALSE olan bir TListBox içerisinde tutar da, Index nosuna göre mesajlarınızı gösterirseniz, bu ListBox da ilgili fonksiyon tarafından yakalanabilecek niteliktedir.

procedure CompList( aForm:TForm; aList :TStrings);
 function StrIDX(const sAra: String;
                 const aArray: array of String): Integer;
 begin
    result := 0;
   // ANSISameText ile ANSISameStr arasındaki fark
   // ANSISameText büyük/küçük harf duyarsız...
    while ( result < Length(aArray)                )
      and ( NOT ANSISameText(sAra, aArray[result]) )
        do Inc(result);
    if result = Length(aArray) then result := -1;
 end;
Const
 SinifArray : Array of String = [ 'TBitBtn', 'TListBox', 'TButton', 'TEdit', 'TLabel', 'TPanel' ];
var
  i : Integer;
begin
  aList.Clear;
  for i := 0 to aForm.ComponentCount-1 do
  begin
    Case StrIdx( aForm.Components[i].classname, SinifArray ) of
    0 : aList.Add( TBitBtn ( aForm.Components[i] ).Name );
    1 : aList.Add( TListBox( aForm.Components[i] ).Name );
    2 : aList.Add( TButton ( aForm.Components[i] ).Name );
    3 : aList.Add( TEdit   ( aForm.Components[i] ).Name );
    4 : aList.Add( TLabel  ( aForm.Components[i] ).Name );
    5 : aList.Add( TPanel  ( aForm.Components[i] ).Name );
   -1 : aList.Add( 'Eksik Sınıf : ' + aForm.Components[i].classname );
    End;
  end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 CompList( self, ListBox1.Items );
end;


Edit : TBitBtn ( aForm.Components[i] ).Name gibi yazmamın sebebi, açıklayıcı olsun diyedir. Name özelliği için sınıf atamasına da CASE yapısına da lüzum yok.  Rolleyes
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#8
Selamlar

benim aklıma gelende 
if Assigned(GetPropInfo(obje, 'Visible')) ile Eldeki nesnenin Visible özelliği varsa 
aynı nesnenin Caption, Hint, TextHint gibi özellikleride kontrol edilerek nesnelerden bağımsız bir şekilde dosya oluşturulabilir.

Bu noktada dikkat etmek gereken CXGrid gibi nesnelerin içerisindeki Columns özelliklerine ve bunların Property içerisindeki görsellere dikkat etmek yeterli olacaktır düşüncesindeyim.

sizce böyle bir yapıda sorun çıkabilecek eksiklikler olabilirmi.
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#9
@adelphiforumz  zekice bir yaklaşım.

Bileşenlere verilecek isimler BT01, BT02, ED01, ED02, CB01  gibi belirli bir formatta olması, üçüncü kişi olası çevirmenler için kolaylık sağlayacak şekilde verimli olur gibi geliyor.  Dil veritabanı (INI, XML, DB vb. ) içinde BT01 = 'Kayıt', BT02 = 'ÇIKIŞ' gibisinden.

Dolayısıyla nesnelerin NAME propertysine erişmek yetecek ve ilgili dilde karşılığı var mı sorusuna cevap bulunabilecektir.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#10
(04-06-2018, Saat: 15:06)mrmarman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.@adelphiforumz  zekice bir yaklaşım.

Bileşenlere verilecek isimler BT01, BT02, ED01, ED02, CB01  gibi belirli bir formatta olması, üçüncü kişi olası çevirmenler için kolaylık sağlayacak şekilde verimli olur gibi geliyor.  Dil veritabanı (INI, XML, DB vb. ) içinde BT01 = 'Kayıt', BT02 = 'ÇIKIŞ' gibisinden.

Dolayısıyla nesnelerin NAME propertysine erişmek yetecek ve ilgili dilde karşılığı var mı sorusuna cevap bulunabilecektir.

@mrmarman hocam estağfurullah bizden çok daha zeki arkadaşlarımız var bu platformda
Bizimki sadece bu meslekteki fosillikten gelen tecrübe kırıntıları diyebiliriz ancak.
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Program çözünürlüğü hk. wiseman 11 681 17-07-2019, Saat: 17:40
Son Yorum: Emrah Karagöz
  ORM için öneri OBK 4 462 25-04-2019, Saat: 16:43
Son Yorum: kodamelesi
  Windows Oturumu Açılmadan Program Nasıl Çalışır theSinan 15 1.599 15-04-2019, Saat: 00:15
Son Yorum: theSinan
  Windows 8.1'de always on top program yazma sorunu denem3 9 978 18-01-2019, Saat: 16:52
Son Yorum: denem3
  Farklı programları tek bir program altında birleştirme wiseman 5 650 06-01-2019, Saat: 00:17
Son Yorum: anemos



Konuyu Okuyanlar: 1 Ziyaretçi