İçindekiler
Yazılımda Dil Uyarlaması: Kelimesi Kelimesine Çevirinin Ötesine Geçmek
Temel Çıkarımlar
- Dil uyarlaması; yalnızca sözcük dağarcığıyla değil, dilbilgisi, çoğullar, cinsiyet, resmîlik ve kültürel bağlamla da ilgilenir
- ICU MessageFormat, diller arası çoğulları, cinsiyeti ve seçim ifadelerini yönetmek için standart bir sözdizimi sunar
- Farklı dillerin farklı çoğul kuralları vardır — Arapçada 6 çoğul biçimi bulunurken Japonca'da hiç yoktur
- Sağdan sola (RTL) yazılan diller yalnızca metin yönünün değiştirilmesini değil, arayüzün ayna görüntüsünün alınmasını gerektirir
- Doğru dil uyarlaması, hedef pazarlarda kullanıcı karışıklığını azaltır ve ürün benimsenmesini artırır
Dil Uyarlaması Nedir?
Dil uyarlaması, yazılım içeriğinin her hedef yerel ayarın dilbilgisel kurallarına, kültürel normlarına ve kullanıcı beklentilerine uyacak şekilde düzenlenmesi sürecidir. Bir dildeki sözcüklerin diğer dildeki karşılıklarıyla değiştirilmesinin ötesine geçerek dillerin yapısal farklılıklarını ele alır.
Örneğin İngilizce "1 item" ile "2 items" (iki çoğul biçimi) kullanırken Lehçe'de üç biçim bulunur: "1 element", "2 elementy", "5 elementów". Rusçada da benzer bir karmaşıklık vardır. Arapçada ise altı ayrı çoğul kategorisi mevcuttur. Bunu doğru şekilde ele almak için sözlük aramasından çok daha fazlası gerekir.
Çoğul Kuralları
Çoğul yönetimi, yazılımda dil uyarlamasının en görünür zorluklarından biridir. Unicode CLDR (Ortak Yerel Veri Deposu) altı çoğul kategorisi tanımlar: zero, one, two, few, many ve other.
Dillere Göre Örnekler
| Dil | Kullanılan Kategoriler | Örnek |
|---|---|---|
| İngilizce | one, other | 1 file, 2 files |
| Fransızca | one, other | 1 fichier, 2 fichiers ("one" 0 ve 1 için geçerlidir) |
| Lehçe | one, few, many, other | 1 plik, 2 pliki, 5 plików |
| Arapça | zero, one, two, few, many, other | Tüm 6 biçim kullanılır |
| Japonca | other | Yalnızca bir biçim (çoğul yok) |
| Rusça | one, few, many, other | 1 файл, 2 файла, 5 файлов |
Çoğullar için ICU MessageFormat
{count, plural,
one {# file selected}
other {# files selected}
}
Lehçe için aynı anahtar şu şekilde kullanılır:
{count, plural,
one {# plik wybrany}
few {# pliki wybrane}
many {# plików wybranych}
other {# pliku wybranego}
}
i18n kütüphanesi, CLDR'de tanımlanan yerel ayarın çoğul kurallarına göre hangi kategorinin kullanılacağını belirler.
Cinsiyet ve Dilbilgisel Uyum
Pek çok dilde dilbilgisel cinsiyet, makaleleri, sıfatları ve fiil biçimlerini etkiler. Fransızcada "The file is deleted" (Dosya silindi) ifadesi bağlama göre farklı çevrilir:
- Eril: "Le fichier est supprimé"
- Dişil: "La photo est supprimée"
ICU MessageFormat bunu select ile ele alır:
{gender, select,
male {Le fichier est supprimé}
female {La photo est supprimée}
other {L'élément est supprimé}
}
Uygulamaların, doğru biçimin seçilebilmesi için çevrilmiş dizeyle birlikte cinsiyet bağlamı da iletmesi gerekir.
Resmîlik Düzeyleri
Japonca, Korece, Almanca ve İspanyolca gibi diller resmî ve gayri resmî hitap arasında ayrım yapar. Bu durum şunları etkiler:
- Zamirler: Almancada "du" (gayri resmî) ile "Sie" (resmî)
- Fiil çekimleri: İspanyolcada "tú tienes" ile "usted tiene"
- Tüm cümle yapıları: Japonca keigo (saygı dili) cümle kuruluşunu değiştirir
Bu pazarları hedefleyen yazılımın bir resmîlik düzeyi belirlemesi ve bunu tutarlı biçimde uygulaması gerekir. B2B yazılımların çoğu resmî hitabı tercih ederken tüketici uygulamaları gayri resmîyi seçebilir.
Bazı uygulamalar kullanıcıların ayarlardan tercih ettikleri resmîlik düzeyini seçmesine olanak tanır; bu da paralel çeviri kümelerinin sürdürülmesini gerektirir.
Metin Genişlemesi ve Daralması
İngilizce'den diğer dillere çeviri yapılırken metin uzunluğu önemli ölçüde değişir:
| Hedef Dil | Tipik Genişleme |
|---|---|
| Almanca | %30 daha uzun |
| Fince | %30-40 daha uzun |
| Fransızca | %15-20 daha uzun |
| Çince | %30 daha kısa |
| Japonca | %20-30 daha kısa |
| Korece | %10-20 daha kısa |
Bu durum arayüz düzenini, düğme boyutlarını, tablo sütunlarını ve gezinme menülerini etkiler. Doğru dil uyarlaması şunları gerektirir:
- Metin genişlemesine uyum sağlayan esnek düzenler
- En uzun hedef dille (genellikle Almanca veya Fince) test yapılması
- Çevrilebilir metin için sabit genişlikli kapsayıcılardan kaçınılması
text-overflow: ellipsisgibi CSS tekniklerinin varsayılan değil son çare olarak kullanılması
Sağdan Sola (RTL) Yazılan Diller
Arapça, İbranice, Farsça ve Urduca sağdan sola yazılır. RTL için uyarlama yapmak, HTML öğesine yalnızca dir="rtl" eklemenin ötesine geçer:
- Arayüz yansıtma: Gezinti, kenar çubukları ve simge konumları yansıtılmalıdır
- Çift yönlü metin: Karışık LTR/RTL içerik (örn. Arapça metin içinde İngilizce marka adları) için Unicode Çift Yönlü Algoritması'nın doğru uygulanması gerekir
- Yön bildiren simgeler: Ok simgeleri, ilerleme göstergeleri ve "geri" düğmelerinin çevrilmesi gerekir
- Sayılar: Arap-Hint rakamları (٠١٢٣) bazı bağlamlarda beklenebilirken diğerlerinde Batı rakamları (0123) kullanılır
- CSS mantıksal özellikleri: Otomatik RTL desteği için
margin-leftyerinemargin-inline-startkullanın
/* Yerine: */
.sidebar { margin-left: 20px; }
/* Mantıksal özellikleri kullanın: */
.sidebar { margin-inline-start: 20px; }
Tarih, Saat ve Sayı Biçimlendirmesi
Yerel ayara duyarlı biçimlendirme, dil uyarlamasının kritik bir parçasıdır:
| Biçim | ABD İngilizcesi | Almanca | Japonca |
|---|---|---|---|
| Tarih | 03/02/2026 | 02.03.2026 | 2026年3月2日 |
| Sayı | 1,234.56 | 1.234,56 | 1,234.56 |
| Para Birimi | $1,234.56 | 1.234,56 € | ¥1,235 |
| Saat | 3:30 PM | 15:30 | 15:30 |
JavaScript'teki Intl API'si biçimlendirmenin büyük kısmını otomatik olarak yönetir:
new Intl.NumberFormat('de-DE', {
style: 'currency',
currency: 'EUR'
}).format(1234.56)
// → "1.234,56 €"
Pratik Uygulama İpuçları
- ICU MessageFormat kullanın: Çoğulları, cinsiyeti ve seçim ifadelerini diller arası standart bir şekilde ele alır
- Çevrilmiş dizeleri hiçbir zaman birleştirmeyin: "Welcome, " + name + "!" sözcük sırasının farklı olduğu dillerde bozulur
- Kullanıcıya yönelik tüm metinleri dışsallaştırın: Hata mesajları ve doğrulama metinleri bile çeviri gerektirir
- Sözde yerelleştirmeyle test edin: Metni genişleten ve vurgulu karakterler ekleyen araçlar kullanarak düzen sorunlarını erkenden tespit edin
- Çevirmenler için bağlam sağlayın: "Open" gibi bir dize fiil ("Dosyayı aç") ya da sıfat ("Dosya açık") olabilir; doğru çeviri bağlama göre belirlenir
- CSS mantıksal özelliklerini kullanın: Ayrı stil sayfalarına gerek kalmadan RTL düzenini otomatik olarak ele alırlar
- Anadil konuşanlarla doğrulayın: Otomatik araçlar biçimlendirme sorunlarını yakalar, ancak kültürel uygunluk insan değerlendirmesi gerektirir
SSS
Çeviri ile dil uyarlaması arasındaki fark nedir?
Çeviri, metni bir dilden diğerine aktarır. Dil uyarlaması ise her yerel ayar için doğal bir deneyim oluşturmak amacıyla dilbilgisini (çoğullar, cinsiyet), biçimlendirmeyi (tarihler, sayılar, para birimleri), arayüz düzenini (RTL desteği, metin genişlemesi) ve kültürel bağlamı (resmîlik düzeyleri, renk anlamları, deyimler) de düzenleyerek daha ileri gider.
ICU MessageFormat dil uyarlamasına nasıl yardımcı olur?
ICU MessageFormat, çoğu i18n kütüphanesi (react-intl, vue-i18n, better-i18n) tarafından desteklenen standart bir sözdizimdir. Çevirmenlerin çoğulları, cinsiyet seçimini ve koşullu metni tek bir çeviri dizesi içinde ele almasına olanak tanır. Geliştiricilerin her dilin kuralları için if/else mantığı yazması yerine çevirmen uygun MessageFormat kalıbını yazar ve kütüphane bunu çalışma zamanında çözümler.
RTL diller için ayrı kod tabanlarına ihtiyaç var mı?
Hayır. Modern CSS mantıksal özellikleri (margin-inline-start, padding-block-end vb.) ve dir="rtl" HTML özelliği, RTL düzeninin büyük kısmını otomatik olarak ele alır. Temel nokta, projenizin başından itibaren margin-left gibi sabit yönlü değerler yerine mantıksal eşdeğerleri kullanmaktır.