Uluslararasılaştırma
3.1.2 Sorunlu Noktalar
Tabi metinler program içinde her zaman böyle bir fonksiyon çağrısı
ile kolayca çevrilebilecek biçimde kullanılmıyor. Dillerin farklı
yapıları da kimi sorunlar çıkarmakta. Örneğin isimlerin çoğul ve tekil
hallerinin kullanımı dilden dile değişmekte.
-
printf ("%d file%s deleted", n, n == 1 ? "" : "s");
Burada son parametredeki ? deyimi n değeri 1 olmadığı koşullarda 'file'
yerine 'files' şeklinde çıktı verilmesini sağlamakta. Ancak Türkçe
ve benzeri dillerde İngilizce'deki bu kural yok. Bu durumlarda daha
açık yazmayı tercih etmelisiniz:
-
if (n == 1)
printf ("%d file deleted", n);
else
printf ("%d files deleted", n);
Her zaman iletileri gettext ile kuşatmanız mümkün olmayabilir. Örneğin:
-
static const char *messages[] = {
"some very meaningful message",
"and another one"
};
fputs (gettext (messages[i]));
Burdaki sorun, basılacak olan ileti için gettext fonksiyonunun çağrılması,
ancak çevrilecek iletileri içeren dosyayı oluşturacak xgettext programının
kod içerisinde bu iletileri görememesidir. Bunu çözümü için;
-
#define gettext_noop(x) x
static const char *messages[] = {
gettext_noop ("some very meaningful message"),
gettext_noop ("and another one")
};
fputs (gettext (messages[i]));
kullanılabilir. gettext_noop için N_ makrosu da tanımlanabilir,
böylece fazla yazı yazmaktan kurtulunur.
-
#define N_ (x) gettext_noop (x)
Bu iki makro da herhangi bir kod çağırmaz, yalnızca metinlerin çevrilecek
metinler olduğunu xgettext'in anlamasını sağlarlar.
Çevirilerin rahatça yapılabilmesi için, özgün iletilerinizin belirsizlik
içermeyen, anlaşılır, tam tümceler olmasına dikkat edin. Sözcükleri
birleştirmek yerine birden fazla tümce kullanmayı tercih edin, örneğin:
-
printf ("File %s is %s", filename,
size < 16000 ? "small" : "big");
yerine:
-
printf (size < 16000 ? _("File %s is small")
: _("File %s is big"), filename);
Tek bir durumu anlatan çok satırlı iletileri, satır satır basmak yerine,
içinde n ile satır dönüşü içeren tek bir ileti olarak
kullanmaya çalışın. Böylece çevirmenler yarım satırları çevirme ve
bölünme yüzünden tutarsız çevirmeler yapma durumunda kalmayacaklardır.