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

0 36

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.

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

Doğru kullanım ise:

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.
Şimdi tarihimizi Türkiye testinden geçer not aldı.

İ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.

Sizce bu kod nasıl bir sonuç üretir. Türkiye testinden geçer mi?
Tabi ki geçmez. Sebep: Türk halkı rakamları gruplamak için bir dönem kullanır (ABD’deki insanlar virgül kullanır gibi). İstediğiniz gibi% 4,5 indirim almak yerine Türk halkı% 45 indirim alacaktır.

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.

Bu kullanım sadece Türkiye’de değil dünyanın hiçbir yerinde doğru sonuç vermeyecektir.
string.Compare metodu kullanarak
string.ToLower metodunu kullanarak
Veya CurrentCultureIgnoreCase ile String.Equals kullanarak
Ya da güvenilir bir Düzenli İfade kullanarak

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

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

Veya

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

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:

Açıklama: http://www.moserware.com/assets/does-your-code-pass-turkey-test/turkeyStringRegexGood.png
  • 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):

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

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:

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

“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:

“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