Mühendislik//10 dk okuma

Yazılım Yerelleştirmesinde Yazı Sistemi ve Alfabe Değerlendirmeleri

Eray Gündoğmuş
Paylaş

Yazılım Yerelleştirmesinde Yazı Sistemi ve Alfabe Değerlendirmeleri

Temel Çıkarımlar

  • Unicode standardı 161 farklı yazı sisteminde 150.000'den fazla karakter tanımlar; yazılım bunların tümünü doğru şekilde işleyebilmelidir
  • CJK (Çince, Japonca, Korece) yazı sistemlerinin kendine özgü satır sonu kuralları vardır — belirli karakter dizilerinin ortasında satır kesilemez
  • Arapça ve İbranice, karmaşık çift yönlü metin işleme gerektiren sağdan sola (RTL) işleme kullanır
  • Devanagari gibi Hint yazı sistemleri, metin ölçümünü ve imleç konumlandırmasını etkileyen birleşik ünsüzler ve birleştirme işaretleri kullanır
  • Font yığını ve geri dönüş stratejileri, metnin desteklenen tüm yazı sistemlerinde doğru şekilde işlenmesini sağlar

Yazı Sistemleri Neden Önemlidir?

Yazılım yerelleştirirken geliştiriciler çoğunlukla dizgi çevirisine odaklanır; ancak farklı yazı sistemlerinin getirdiği işleme ve giriş zorluklarını göz ardı eder. İngilizce'de düzgün çalışan bir düğme, Almanca'da kesilebilir, Arapça'da yanlış görüntülenebilir ya da Japonca'da hatalı satır sonları kullanabilir.

Farklı yazı sistemlerinin nasıl çalıştığını anlamak, ekiplerin çok dilli içeriği baştan doğru biçimde işleyen yazılımlar geliştirmesine olanak tanır; böylece yayın sonrasında işleme hatalarını düzeltmek gerekmez.

Latin Tabanlı Yazı Sistemleri

Latin alfabesi; İngilizce, İspanyolca, Fransızca, Almanca ve diğer pek çok dil tarafından kullanılır. Kolay görünse de göz önünde bulundurulması gereken noktalar vardır:

  • Diakritikler ve aksanlar: ñ, ü, ç, ø gibi karakterler için uygun Unicode desteği gereklidir. ASCII yaklaşımları (ü yerine u kullanmak) doğru değildir.
  • Metin genişlemesi: Almanca ve Fince metinler İngilizce karşılıklarından %30-40 daha uzun olabilir
  • Özel karakterler: Vietnamca gibi diller, yeterli satır yüksekliği gerektiren üst üste diakritikler (örn. ệ) kullanır
  • Sıralama/Collation: Alfabetik sıra dillere göre değişir — İsveççe'de å, ä, ö harfleri a ve o ile değil, alfabenin sonunda yer alır

CJK (Çince, Japonca, Korece)

CJK yazı sistemleri kendine özgü teknik zorluklar sunar:

Karakter Setleri

  • Çince: Basitleştirilmiş Çince (anakarada ve Singapur'da kullanılır) ile Geleneksel Çince (Tayvan ve Hong Kong'da kullanılır) farklı karakter setleri kullanır. Bunlar birbirinin yerine geçemez.
  • Japonca: Üç yazı sistemini aynı anda kullanır — Kanji (Çince kökenli karakterler), Hiragana (hece alfabesi) ve Katakana (yabancı kelimeler için hece alfabesi)
  • Korece: Hece bloklarından oluşan özelliksel bir alfabe olan Hangul'u kullanır

Satır Sonu Kuralları

CJK metinlerde kelimeler arasında boşluk kullanılmaz. Satır sonları, Unicode Satır Sonu Algoritması'nda (UAX #14) tanımlanan kurallara göre yapılır:

  • CJK karakterlerin büyük çoğunluğu satır sonu noktası olarak kullanılabilir
  • Belirli noktalama işaretleri satır başında yer alamaz (örn. 。、)」)
  • Belirli noktalama işaretleri satır sonunda yer alamaz (örn. (「)
  • word-break: break-all CSS özelliği gerekebilir; ancak daha nüanslı bir alternatif olarak overflow-wrap: break-word tercih edilebilir

Font Değerlendirmeleri

CJK fontları, Latin fontlarına kıyasla çok daha büyüktür (yüzlerce glif yerine on binlerce). Font yükleme stratejileri şunlardır:

  • Sistem fontları önce: font-family: -apple-system, "Hiragino Sans", "MS Gothic", sans-serif
  • Alt küme yükleme: @font-face içinde unicode-range kullanarak yalnızca gerekli karakter aralıklarını yükleyin
  • Değişken fontlar: Birden fazla kalınlığı desteklerken toplam font dosya boyutunu azaltın

Arapça Yazı Sistemi

Arapça yazı sistemi; Arapça, Farsça, Urduca ve diğer diller tarafından kullanılır. Temel değerlendirmeler:

Sağdan Sola (RTL) İşleme

  • Metin sağdan sola akar
  • Arayüz öğeleri yansıtılmalıdır: navigasyon, kenar çubukları, yön bilgisi içeren simgeler
  • CSS mantıksal özelliklerini kullanın (margin-left yerine margin-inline-start)
  • HTML öğesine veya belirli kaplara dir="rtl" ekleyin

Bağlamsal Biçimlendirme

Arapça harfler, bir kelimede bulundukları konuma göre şekillerini değiştirir:

KonumFormÖrnek (ب)
YalınBağımsızب
BaşlangıçKelimenin başıبـ
OrtadakiKelimenin ortasıـبـ
SonKelimenin sonuـب

Modern metin işleme motorları (HarfBuzz, CoreText, DirectWrite) bunu otomatik olarak yönetir; ancak özel metin işleme veya canvas tabanlı arayüzler açık destek gerektirebilir.

Çift Yönlü (Bidi) Metin

Arapça metin gömülü İngilizce kelimeler, sayılar veya marka adları içerdiğinde, Unicode Çift Yönlü Algoritması (UBA) görüntüleme sırasını belirler. Geliştiriciler şunlara dikkat etmelidir:

  • Karma yönlü metin içerebilecek kullanıcı tarafından oluşturulan içerik için <bdi> HTML öğelerini kullanın
  • Satır içi karma yönlü öğeler için CSS'de unicode-bidi: isolate uygulayın
  • Yalnızca saf RTL metinle değil, gerçek karma yönlü içerikle test edin

Hint Yazı Sistemleri

Devanagari (Hintçe, Marathice, Nepalce), Tamilce, Bengalce, Teluguca ve diğer Hint yazı sistemlerinin karmaşık işleme gereksinimleri vardır:

Birleşik Ünsüzler

Birden fazla ünsüz tek bir görsel glif (ligature) oluşturmak üzere birleşebilir. Örneğin Devanagari'de क + ् + ष = क्ष. Bu durum şunları etkiler:

  • Metin ölçümü: Bir dizenin görsel genişliği, Unicode kod noktalarının sayısıyla doğrusal olarak örtüşmez
  • İmleç konumlandırma: İmleç, birleşik ünsüzleri bölmeden doğru biçimde geçmelidir
  • Metin seçimi: Kullanıcılar birleşik ünsüzleri tek birim olarak seçebilmelidir

Birleştirme İşaretleri

Sesli harf işaretleri (matra), taban ünsüzünün üstüne, altına, önüne veya arkasına eklenir. Bu işaretlerin kesilmemesi için CSS line-height değeri buna göre ayarlanmalıdır.

Font Gereksinimleri

Her font, belirli bir Hint yazı sistemi için tüm birleşik ünsüz yelpazesini desteklemez. Yerleşik fontları kullanın:

  • Devanagari: Noto Sans Devanagari, Mangal
  • Tamilce: Noto Sans Tamil, Latha
  • Bengalce: Noto Sans Bengali, Vrinda

Kodlama En İyi Uygulamaları

Her Yerde UTF-8

UTF-8, modern yazılımlarda tüm metinler için varsayılan kodlama olmalıdır:

  • HTML'de <meta charset="UTF-8"> ekleyin
  • Veritabanı sütunlarında UTF-8 kullanın (MySQL'de utf8mb4, PostgreSQL'de UTF8)
  • Dosya I/O işlemlerinin UTF-8 kodlaması kullandığından emin olun
  • HTTP başlıklarında Content-Type: text/html; charset=UTF-8 belirtin

Dize Uzunluğu ile Görüntüleme Genişliği

Kullanıcının algıladığı tek bir "karakter" birden fazla Unicode kod noktasından oluşabilir:

KavramÖrnekKod Noktası Sayısı
Basit karakterA1
Aksanlı karakteré1 veya 2 (önceden birleşik veya birleştirici)
CJK karakteri1 (ancak çift genişlik)
Emoji👨‍👩‍👧‍👦7 (sıfır genişlikli birleştirici ile)
Devanagari birleşik ünsüzüक्ष3

Kullanıcıya görünen karakterleri saymak gerektiğinde .length yerine grafem kümesi sayımını kullanın (JavaScript'te Intl.Segmenter ile kullanılabilir).

// JavaScript: Grafem kümelerini say
const segmenter = new Intl.Segmenter('en', { granularity: 'grapheme' });
const count = [...segmenter.segment('👨‍👩‍👧‍👦')].length; // 7 değil, 1

Font Yığını Stratejisi

Sağlam bir font yığını, her yazı sisteminin doğru şekilde işlenmesini sağlar:

body {
  font-family:
    /* Latin */
    "Inter", -apple-system, BlinkMacSystemFont,
    /* CJK */
    "Hiragino Sans", "Noto Sans CJK", "Microsoft YaHei",
    /* Arabic */
    "Noto Sans Arabic", "Segoe UI",
    /* Devanagari */
    "Noto Sans Devanagari",
    /* Fallback */
    sans-serif;
}

Google'ın Noto font ailesi, yazı sistemleri genelinde tutarlı kapsam sunar ve ücretsiz olarak kullanılabilir.

SSS

Başlangıçtan itibaren her yazı sistemini desteklemek gerekiyor mu?

Hayır. Hedef pazarlarınızın kullandığı yazı sistemleriyle başlayın. Ancak teknik altyapınızın (UTF-8 kodlama, esnek düzenler, font yığını) ilerleyen dönemde ek yazı sistemlerini karşılayabildiğinden emin olun. RTL desteği veya CJK satır sonu kurallarını yayın sonrasında eklemek, bunları baştan oluşturmaktan çok daha fazla iş gerektirir.

Uygulamamı farklı yazı sistemleriyle nasıl test edebilirim?

Metin genişlemesini ve özel karakterleri simüle etmek için sözde yerelleştirme araçları kullanın. Yazı sistemine özgü testler için her hedef yazı sisteminde uzun kelimeler, birleşik ünsüzler, çift yönlü metin ve birleştirme işaretleri gibi uç durumları içeren test dizeleri oluşturun. Tarayıcı geliştirici araçları, tam çeviri olmaksızın dir niteliklerini değiştirmenize ve RTL düzenlerini test etmenize olanak tanır.

Çok dilli uygulamalarda web fontları mı yoksa sistem fontları mı kullanmalıyım?

Her iki yaklaşımın da değerlendirme gerektiren yönleri vardır. Sistem fontları indirme maliyeti olmaksızın anında işlenir; ancak marka kimliğinizle örtüşmeyebilir. Web fontları marka tutarlılığı sağlar; fakat CJK web fontları oldukça büyük olabilir (birkaç megabayt). Yaygın bir yaklaşım; Latin metinler için web fontları, CJK ve diğer karmaşık yazı sistemleri için ise unicode-range ile hangi karakterlerin hangi fontu tetikleyeceğini kontrol ederek sistem font geri dönüşleri kullanmaktır.

Comments

Loading comments...