Konuyu Oyla:
  • Derecelendirme: 5/5 - 3 oy
  • 1
  • 2
  • 3
  • 4
  • 5
FMX Projelerinize hızlı dil desteği eklemek
#1
Star 
Merhaba,

Geçenlerde yaptığım küçük bir projede deneme fırsatı bulduğum TLang Komponentinin kullanımı ile ilgili çeşitli bilgilendirmelerde bulunmak istiyorum. Öncelikle FMX Projelerinize hızlı dil desteği eklemek için başvuracağınız bu yolun, köklü ve devasa bir projede kullanımında size istediğiniz yanıtı vereceğinden emin değilim. Nitekim yaşadığım sıkıntıları da yazının sonuna doğru sizlere ileteceğim.

Öncelikle nedir bu TLang, ne işimize yarar?

TLang, FMX projelerimizde yer alan string değerlerin çok pratik bir şekilde değiştirilerek, yerelleştirme (localize) yapmamıza olanak sunan bir komponent.

Nasıl oluşturulur, Dil karşılığı nasıl girilir, Dil nereden eklenir ve komponent nasıl kullanılır?

Herhangi bir komponent yerleştirir gibi Tool Palette'in içerisinden alıp form üzerine bırakabilirsiniz. Bu komponent, diğerlerine nazaran tüm projenin içindeki statik olan string değerleri tarayıp toplama kabiliyetine sahip. (Form1'e yerleştirdiğiniz Lang1, Form2..10, kısaca tüm formları tarar.)

Form üzerine yerleştirdiğiniz TLang komponentinin üstüne çift tıklayarak Language Designer'ı aktif edersiniz. Burada üst kısımdan Add language butonuna basarak TR dilini ekleyin. Tüm projenizde yer alan string değerlerin bir listesini altta göreceksiniz. Karşılarına olduğu gibi değerleri aktarın. Ardından yeni dil ekle diyerek EN olarak İngilizce'yi dahil edin. (Örneklem için)

Yukarıda yer alan ComboBox'tan Dil seçimi yaparak string değerlerin o dilde yer alan karşılığını doldurun. Tüm işlem bittiğinde Save file ile dosyanızı projenin kaynak kodlarının olduğu dizinde Language.lang (yada isim ne verirseniz, uzantı lang olmalı) olarak kaydedin. Kullanıma hazırız.

Run-time (Çalışma anında) Dil değişimi nasıl yapılır?

Bu komponentin acemilik döneminde yapılan basit bir yöntem var. Bu yöntem bazı sorunlar oluşturabiliyor. Mesela Android cihazda çok dil desteği hazır bir projenin Combobox nesnelerinde sadece ItemIndex'inde yer alan string değer dil değişimini görüyorken, diğer ön tanımlı değerler ne yazık ki başarısız oluyor. Tüm değerleri mevcut fonksiyon ile aldığınızda bu sorun yaşanmıyor.

//Lang1.Lang := 'en'; // bunu kullanmayın!
LoadLangFromStrings(Lang1.LangStr['en']); // bu sağlıklı yöntem

Köklü ve devasa bir projede neden tercih edilmez?

Bir önceki soruda yaşadığımız statik string değerlerin okunmasındaki problem, dinamik değerlerin dil karşılıklarını da okumamıza engel olacaktır. Bunun yerine çok dil desteği olan projelerde genellikle veritabanı yapılarının çoklu dile uyumlu olması sorunumuzu çözecektir. Kelime tablosunda işaretlemeleri yapacak uygun KEY değerlerini oluşturup, dilleri tanıttıktan sonra aktif dilde bu key'in value'su ne ise onu doğrudan kullanabilirsiniz.

TLang hangi projeler için doğru bir tercih olur?

Üzerinde veritabanı işlemlerini çok yapmayacağınız, yapacaksanız da ortak değerleri muhafaza edecek şekliyle dinamik verilerin çeviri yönetimini manuel yapacağınız her projede kullanılabilir. Statik string değerlere sahip projeler için müthiş hız kazandıracaktır. Tanıtım projelerinde, ürün projelerinde, basit fonksiyonel işlemlerde ve oyunlarda genellikle sabit menü ve  string kullanımı yaygındır. Bu yüzden saydığım proje türlerinde kullanmanız avantajlı olacaktır.


Dip: örnek bir proje oluşturup ekran görüntüleri almak için yeterli zamanım olmadığı için sizlere hazır bir örnek linki vereceğim. Örnekte ListBox'ta seçilen dil doğrultusunda string değerlerin değişimini ve kelimenin kullanımını gösteriyor.
Cevapla
#2
Teşekkürler Abdullah bey.
Cevapla
#3
Merhabalar,
Program icerisindeki string ifadeleri nasil alabilirim.
Mesela showmessage('deneme')
"deneme " ifadesi gibi.
Teşekkürler
Cevapla
#4
(03-08-2017, Saat: 16:51)klavye Adlı Kullanıcıdan Alıntı: Merhabalar,
Program icerisindeki string ifadeleri nasil alabilirim.
Mesela showmessage('deneme')
"deneme " ifadesi gibi.
Teşekkürler

Merhaba,

TLang nesnenizin üzerine çift tıkladıktan sonra açılan Dil Yönetim Ekranında proje kapsamında geçen sabit statik metin değerleri tespit edebiliyor olsa da, İlave olarak bir "key" değeri girmek için görselde gösterdiğim + butonuna tıkladıktan sonra (örneğinizdeki) 'deneme' ifadesini yazın. Daha sonra ComboBox'tan dilleri değiştirerek alakalı dilde karşılık değerini girebilirsiniz.

vp2nb4.png
Cevapla
#5
Ek: Sabit değerler oluşturarak onları da taratabilirsiniz. Ancak size tavsiyem üstte gösterdiğim örnekteki şekliyle doğrudan string anahtar kelimeleri tanıtıp dil karşılıklarını girmeniz olacak. Bunu ilk gönderdiğim mesaj (konu anlatım) içinde yer alan linkte inceleme yaparsanız "Hello" kelimesini doğrudan ShowMessage fonksiyonuna string olarak yazıyor ve dil değişiminde Almanca olarak Hallo şeklinde gösteriyor.

Daha amatör ve hızlı çözmek isterseniz bu stringleri muhafaza edeceğiniz gözükmeyen TLabel nesnelerine yazarak oradan çevirisini sağlayabilirsiniz.

İyi günler diliyorum.
Cevapla
#6
Teşekkürler Abdullah bey.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Tüm Platformlar için Hızlı uygulama Geliştirme - Tüm Örnek Uygulamalar RAD Coder 11 3.891 25-06-2023, Saat: 15:38
Son Yorum: walidAlgeria
  Delphi ve Android 12 Yetkileri Hızlı Çözüm Rehberi Abdullah ILGAZ 0 777 16-01-2023, Saat: 01:52
Son Yorum: Abdullah ILGAZ
  İos-'a Beni Hatırla Eklemek. OmerAsaf 11 3.965 17-04-2022, Saat: 20:38
Son Yorum: mcuyan
  Multi-platform(android) OpenDialog desteği olmadığı için , yerine ne kullanabilirim powerup 4 1.281 02-08-2021, Saat: 13:36
Son Yorum: powerup
  delphi 10.4.1 desteği ile rtmp live camera componenti. fkork 2 1.413 16-12-2020, Saat: 09:16
Son Yorum: RAD Coder



Konuyu Okuyanlar: 1 Ziyaretçi