Yazdığınız Kodlar “Türkiye” Uyumlu mu?

0 308

Yazılım üreticiler geliştirdikleri yazılımları evrenselleştirirken en çok problem oluşturan ülkenin Türkiye olduğunu biliyor muydunuz? Yazılım veya web sitesi sahiplerinden bazıları geri dönüş aldıkları problemlerin büyük bir kısmının Türkiye kaynaklı Türkçe kullanılan sistemlerde ve tarayıcılardan geldiğini görmüş. Bunun üzerine kimisi tamamen arayüzü değiştirerek gibiside bu hatalara gözünü kapayarak işine devam etmiş.

Bu Türkiye kaynaklı hataların temel 3 sebebi var.

Sebeplerden ilki ABD’de kullanılan 3/14/2020 şeklindeki “Bugün” formatının Türkiye’deki hali 21.03.2020 şeklinde olması. Yani bizim gün/ay/yıl olarak yazılan tarih biçimi Amerikan standratlarında ay/gün/yıl şeklinde.

Yazdığınız Kodlar "Türkiye" Uyumlu mu? 1

Bu kullanım her ne kadar Türkiye için uygun gözüksede ne yazık ki yanlış.

Doğru kullanım ise:

Yazdığınız Kodlar "Türkiye" Uyumlu mu? 2
Bu hatayı dzüeltmek için her zaman tarihinizin hangi formatta olduğunu belirtmelisiniz. Bu durumda, yalnızca ABD İngilizcesi formatı (daha fazla veya daha az) olan bir DateTimeFormat.InvariantInfo kullanırız.

İkincisi ise sayıların yazılış biçimindeki farklılık. ABD de sayılar 35,653 şeklinde 3 lü rakam gruplarının arasına virgül (,) işareti konulurken Türkiye’de sayılar 34.653 formatında 3 lü grupların arasına (.) nokta işareti kullanılıyor.

Yazdığınız Kodlar "Türkiye" Uyumlu mu? 3
Sizce bu kod nasıl bir sonuç üretir. Türkiye testinden geçer mi?
Yazdığınız Kodlar "Türkiye" Uyumlu mu? 4

Aslında yukarda saydığımız iki problemi de çözmek bir programcı için çok kolay ve birçok programcı bu iki sebepteki sorunları önceden kestirip bunlara önlem alıyor. Çünkü bunlar farklı ülkelerde de farklılık gösterebiliyor. Ama üçüncüsü daha çok Türkiye’ye özel ve bunu önceden kestirmek çok güç. Ki bu da İngilizce de büyük “İ” harfi ve küçük “ı” harfi bulunmayışı, onlara göre de bizde fazladan bu harflerin bulunuşu.

Yazdığınız Kodlar "Türkiye" Uyumlu mu? 5
string.Compare metodu kullanarak
Yazdığınız Kodlar "Türkiye" Uyumlu mu? 6
Veya CurrentCultureIgnoreCase ile String.Equals kullanarak

peki üstteki karşılaştırmalar bizi Türkiye testinden geçirir mi? ne yazık ki “HAYIR”.

Yazdığınız Kodlar "Türkiye" Uyumlu mu? 7
Açıklama: http://www.moserware.com/assets/does-your-code-pass-turkey-test/turkeyStringCompareGood.png

Veya

Veya

Açıklama: http://www.moserware.com/assets/does-your-code-pass-turkey-test/turkeyStringOIC.png

Ve son olarak, Regex arkadaşımız için bir düzeltme:

  • Aslında böyle bir şey yazarken kendini beğenmiştim (yorum not):
Açıklama: http://www.moserware.com/assets/does-your-code-pass-turkey-test/turkeyZipCodeRegexBad.png

Bu basit program “Türkiye Testi” ni geçiyor mu?

Muhtemelen “evet” demekten çekiniyorsunuz… ve haklı olarak. Çünkü bu da testi geçemez.

Sebep: Raymond Chen’in işaret ettiği gibi, orada 10’dan fazla basamak var. Burada gerçek Arapça rakamlar kullanıyorum ( bu kod tablosunun 4. sayfasına bakınız):

Düzeltme: Bir CultureInvariant burada size yardımcı olmaz. Tek seçenek, kastettiğiniz karakter aralığını açıkça belirtmektir:

Açıklama: http://www.moserware.com/assets/does-your-code-pass-turkey-test/turkeyZipCodeRegexGoodExplicit.png

Veya RegexOptions.ECMAScript seçeneğini kullanın. Java ECMAScript’te , “\ d” bize şunu veren [0-9] anlamına gelir:

“Türkiye Testi” çok basit bir soru sorsa da, benim gibi tüm küçük detayları anlamayan adamlar için sürprizlerle doludur.

“Türkiye Testi” çok basit bir soru sorsa da, benim gibi tüm küçük detayları anlamayan adamlar için sürprizlerle doludur.

“Türkiye Testi” çok basit bir soru sorsa da, benim gibi tüm küçük detayları anlamayan adamlar için sürprizlerle doludur. Yukarıda gördüğümüz gibi Türkiye, klasik Frank Sinatra şarkısında “New York, New York” gibi:

“Bu küçük kasaba mavileri eriyor,
Yeni bir başlangıç ​​yapacağım – eski New York’ta
Eğer orada yapabilirsem, her yerde yaparım
Bu size bağlı – New York, New York ”

Kodunuz Türkiye’de düzgün çalışıyorsa, muhtemelen her yerde çalışır.

Bu bizi logo programına getiriyor:

Yazdığınız Kodlar "Türkiye" Uyumlu mu? 8

“Turkey Test” Logo Program Gereksinimleri :

  1. Joel Spolsky’nin Unicode’a temel girişini okuyun.
  2. Microsoft’un “ Microsoft .NET 2.0’da Dizeleri Kullanmaya Yönelik Yeni Öneriler ” makalesini ve BCL ekibi tarafından bu yayını okuyun .
  3. Kullandığınız tüm dize, ayrıştırma ve normal ifade için her zaman kültürü ve sayı biçimlendiriciyi belirtin.
  4. Kullanıcıdan veri okuduysanız ve bunları dile duyarlı bir konuda (örneğin sıralama) işlemek istiyorsanız, CurrentCulture’u kullanın. Bunların hiçbiri önemli değilse, gerçekten Ordinal karşılaştırmaları kullanmayı deneyin.
  5. Kodunuzda FxCop komutunu çalıştırın ve CA1304 (SpecifyCultureInfo) veya CA1305 (SpecifyIFormatProvider) uyarısı olmadığından emin olun.
  6. Tr-TR ” kültürünün yanı sıra yerel kültürünüzdeki işlemleri karşılaştıran birim test dizesi (aslında Türkiye’de yaşamıyorsanız, “en-US” gibi bir kültür kullanmayın).

Yukarıdaki gereksinimleri başarıyla geçtikten sonra, yazılımınız nihayet gururla “Passed ‘The Turkey Test’” logosunu kullanabilecektir.

Kaynak : (Does Your Code Pass The Turkey Test?)

Başka bir referans site daha. (What’s Wrong With Turkey?)

MDSN’de Türkiye ye uygun program yapmak için gerekenleri anlatan bir makale (New Recommendations for Using Strings in Microsoft .NET 2.0)



Cevap bırakın

E-posta hesabınız yayımlanmayacak.

Bu web sitesi deneyiminizi geliştirmek için çerezleri kullanır. Bununla iyi olduğunuzu varsayacağız, ancak isterseniz vazgeçebilirsiniz. Kabul etmek Mesajları Oku