• Şuradasınız
  • Anasayfa
  • JQuery
  • Jquery ile Türkçe Karakterleri İngilizceye Çevirme

Jquery ile Türkçe Karakterleri İngilizceye Çevirme

Bazı uygulamalarda Türkçe karakterler istenmiyor. Özellikle bankacılık ve sms uygulamalarında Türkçe karakterler pek kullanılmaz. Kullanıcıya Türkçe karakter kullanmayın demektense, girdiği Türkçe karakterleri alıp düzeltip işimize yarayacak şekle getirmek, yazılımcı olarak bizim görevimiz.

Bu işlemi Server (sunucu) tarafında da yapabilirsiniz, Client (istemci) tarafında da yapabilirsiniz. Türkçe karakterlerin kullanılması bir güvenlik sorunu oluşturacaksa, çeviri işinin Server tarafında yapılması mantıklı olacaktır. Lakin çoğu zaman Client tarafında yapmanız gerekecektir.

Bizim uygulamamız anlık olarak basılan karakterleri kontrol edip işlem yapmaktadır. Önce demoyu görmek istersiniz diye düşünüyorum.

Bu tip bir uygulamayı Jquery ile yapmak için öncelikle bir olay fonksiyonu kullanmak gerekir.

Keypress fonksiyonu işimize yarayacaktır. Adında da anlaşılacağı gibi klavyeden herhangi bir karaktere basıldığında gerçekleşen olay için yapılacak işlemleri tanımlayabileceğiniz bir fonksiyondur. Bir textarea’yı seçip ona keypress fonksiyonunu uyguluyoruz.

$(".tr_to_en").keypress(function (event) {}

Basılan karakterin ne olduğuna bakıyoruz. Aşağıdaki Code değişkeni basılan karakterin ascii karşılığını tutmaktadır.

Code = event.keyCode ? event.keyCode : event.charCode ? event.charCode : 0;

Bu arada 2 adet dizi tanımlayalım, birisi türkçe karakterleri içerisin, diğeri de türkçe karakterlerin ingilizce karşılıklarını içersin. Tabii dizi, karakterlerin ascii karşılıklarını tutuyor.

var tr = [286, 287, 252, 351, 231, 246, 305, 304, 286, 220, 350, 199, 214];
var en = [71, 103, 117, 115, 99, 111, 105, 73, 71, 85, 83, 67, 79];

Eğer basılan karakter tr dizisinin içinde yoksa işleme devam edebiliriz, fakat tr dizisinin içinde mevcutsa onu ingilizce karşılığı ile değiştireceğiz. Bu işlem için inArray fonksiyonunu kullanabiliriz.

inArray fonksiyonu 1. parametresini 2. parametresi içerisinde arar ve 2. parametre bir dizi olduğu için geriye bir bir indis numarası döndürür. Bu şekilde karakterin, tr dizisinde kaçıncı sırada olduğuna bakıp, ingilizce dizisinde yine aynı sıradaki karakterle değiştirebiliriz.

if(jQuery.inArray(Code, tr) >= 0) {
	// Kod tr dizisinde varsa, indis numarasına göre en dizisinden karşılık gelen karakter alınır
	Code = en[jQuery.inArray(Code, tr)];
	// Ascii kodun alfanümerik değere dönüştürülmesi
	var ch = String.fromCharCode(Code);
	// Basılan tr karakter iptal edilir
	event.preventDefault();
	// Mevcut string alınır
	var old = $(".tr_to_en").val();
	// Mevcut stringe yeni karakter eklenir
	$(".tr_to_en").val(old + ch)
}

Bu kod işinize yaracaktır fakat burada hoşuma gitmeyen nokta her karakter basılışında tüm girilen karakterlerin bir değişkene atanıp textarea’dan silinip, yeni karakteri sona ekleyerek textarea’yı tekrar oluşturmasıdır.

Yani her seferinde siz görmesenizde textarea alanı siliniyor, yeni karakter eklenip tekrar dolduruluyor. Bu sorunu append() fonksiyonu ile çözebilirim diye düşünüyordum ama yemedi. append daha farklı bir şekilde çalışıyor. Neyse onu da başka bir yazıda daha detaylıca öğrenip yazmaya çalışırım.

Umarım kod işinize yarar. Tamamını aşağıda bulabilirsiniz.


Benzer Yazılar

Yorumlar

  • Erdal TAŞKESEN , 22 Temmuz 2013 - 09:36:50

    Bir kaç sorun dikkatimi çekti.
    1. ê gibi küllahlı karakterleri düzeltmiyor.
    2. ß æ gibi karakterleri de olduğu gibi gösteriyor.
    3. Ayrıca başka bir yerden kopyala yapıştır yaptığımız zaman da düzeltme yapmıyor.

    Her ne kadar “anlık olarak basılan karakterleri kontrol edip işlem yapmaktadır” uyarısını altını çizerek yapsan da belki dikkatlerini çekmemiştir diye vurgulamak istedim.

    Cevapla
    • Cem Demir , 22 Temmuz 2013 - 11:17:19

      ê, ß, æ gibi karakterler türkçe değil. Bu kod sadece türkçe karakterler üzerinde işlem yapıyor: ğ,ü,ş,i,ö,ç ve bunların büyük harfleri.

      Kopyalayınca sıkıntı çıktığını farketmiştim, onu düzeltmek lazım.

      Cevapla

Yorum Yazın

Su elementleri kullanabilirsiniz : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Arama
RSS
Beni yukari isinla