İçeriğe geç
academia.sh

Ders 24 / 25

Sağdan Sola Diller

Yön değişiminin biçem katmanındaki karşılığı, mantıksal özelliklerin fiziksel özelliklere üstünlüğü, simge aynalamasının ölçüte bağlanması, iki yönlü metinde yalıtım ve klavye sözleşmelerinin akış yönüyle yazılması.

İçindekiler

Önceki dersin bütün örnekleri soldan sağa yazılan dillerdeydi. Katalog sağdan sola yazılan bir dile açıldığında değişen şey metnin yönünden ibaret değildir: kayıt kartının kenarlığı karşı tarafa geçer, süzgeç paneli ekranın öbür yanına taşınır, ileri oku ters çevrilir ama saat simgesi olduğu gibi kalır.

Bu ders yön değişimini bir çeviri sorunu olarak değil, bir mimari karar olarak ele alır. Kararın alındığı yer biçem katmanıdır ve kararın ölçüsü, kaç bildirimin yön değişiminden etkilendiğidir.

Fiziksel Değil Mantıksal Eksen

Sol ve sağ, ekranın sabit yönleridir. Başlangıç ve bitiş ise akışa bağlıdır: soldan sağa yazılan bir düzende başlangıç soldadır, sağdan sola yazılanda sağdadır. Bir bileşenin kenarlığı “solda” diye yazıldığında yön değiştiğinde de solda kalır ve düzen bozulur; aynı kenarlık “satır içi başlangıçta” diye yazıldığında akışı izler.

Aşağıdaki hesap katalog bileşenlerinden toplanan bildirimleri fiziksel ve mantıksal karşılıklarıyla listeler ve kaçının yön duyarlı olduğunu sayar.

// yon.mjs — yon duyarli duzen: mantiksal ozellikler, aynalanan ve aynalanmayan ogeler

// 1. Fiziksel ozelliklerin mantiksal karsiliklari.
const ESLEME = {
  "margin-left": "margin-inline-start",
  "margin-right": "margin-inline-end",
  "padding-left": "padding-inline-start",
  "padding-right": "padding-inline-end",
  "border-left": "border-inline-start",
  "text-align: left": "text-align: start",
  "left": "inset-inline-start",
  "width": "inline-size",
  "margin-top": "margin-block-start",
  "border-bottom": "border-block-end",
};
// Katalog bilesenlerinden toplanmis bildirimler.
const BILDIRIMLER = [
  { bilesen: "kayit-karti", bildirim: "padding-left" },
  { bilesen: "kayit-karti", bildirim: "border-left" },
  { bilesen: "kayit-karti", bildirim: "margin-top" },
  { bilesen: "suzgec-paneli", bildirim: "width" },
  { bilesen: "suzgec-paneli", bildirim: "text-align: left" },
  { bilesen: "odunc-dugmesi", bildirim: "margin-right" },
  { bilesen: "bildirim-seridi", bildirim: "left" },
  { bilesen: "bildirim-seridi", bildirim: "border-bottom" },
];
const yatay = (b) => /left|right|width|inline/.test(b);
console.log("bilesen           fiziksel bildirim     mantiksal karsilik        yon duyarli");
let duyarli = 0;
for (const b of BILDIRIMLER) {
  if (yatay(b.bildirim)) duyarli++;
  console.log(
    `${b.bilesen.padEnd(17)} ${b.bildirim.padEnd(21)} ${ESLEME[b.bildirim].padEnd(25)} ${yatay(b.bildirim) ? "evet" : "hayir"}`
  );
}
console.log(`yon duyarli bildirim: ${duyarli} / ${BILDIRIMLER.length}`);
console.log("dikey eksendeki bildirimler yon degisiminden etkilenmez; yine de mantiksal");
console.log("yazilmalari dikey yazim kiplerinde ayni kazanci verir.");

// 2. Aynalanan ve aynalanmayan ogeler.
const OGELER = [
  { ad: "geri oku", aynalanir: true, gerekce: "yonu akisa bagli" },
  { ad: "ileri oku", aynalanir: true, gerekce: "yonu akisa bagli" },
  { ad: "kirinti ayiraci", aynalanir: true, gerekce: "hiyerarsi yonunu gosterir" },
  { ad: "ilerleme cubugu", aynalanir: true, gerekce: "artis yonu akisi izler" },
  { ad: "saat simgesi", aynalanir: false, gerekce: "gercek dunyada yonu sabit" },
  { ad: "onay isareti", aynalanir: false, gerekce: "yon anlam tasimaz" },
  { ad: "arama buyuteci", aynalanir: false, gerekce: "nesnenin kendi bicimi" },
  { ad: "ses seviyesi simgesi", aynalanir: true, gerekce: "artis yonu akisi izler" },
  { ad: "kalem/duzenle", aynalanir: false, gerekce: "nesnenin kendi bicimi" },
];
console.log("\noge                   aynalanir  gerekce");
for (const o of OGELER) console.log(`  ${o.ad.padEnd(20)} ${(o.aynalanir ? "evet" : "hayir").padEnd(10)} ${o.gerekce}`);
console.log(`aynalanan: ${OGELER.filter((o) => o.aynalanir).length} / ${OGELER.length}`);

// 3. Sayilar ve gomulu Latin terimler kendi yonunu korur.
// Iki yonlu metin: paragrafin temel yonu sagdan sola, icindeki sayi soldan saga yazilir.
const SEGMENTLER = [
  { metin: "raf kodu", yon: "rtl" },
  { metin: "QB-141", yon: "ltr" },
  { metin: "yil", yon: "rtl" },
  { metin: "1998", yon: "ltr" },
];
console.log("\nparagraf temel yonu: rtl");
console.log("segment      yon   yalitim gerekir mi");
for (const s of SEGMENTLER) {
  console.log(`  ${s.metin.padEnd(11)} ${s.yon.padEnd(5)} ${s.yon === "ltr" ? "evet" : "hayir"}`);
}
console.log("yalitimsiz birlestirmede soldan saga segmentlerin komsu noktalama isaretleri");
console.log("yanlis tarafa kayar; bu yuzden gomulu segment yalitilir.");

// 4. Bir dizginin gorunen sirasi: yalitimli ve yalitimsiz.
// Basit model: rtl paragrafta segmentler ters sirada dizilir, ltr segment kendi icinde duz kalir.
function gorunenSira(segmentler, temel) {
  const dizi = temel === "rtl" ? [...segmentler].reverse() : segmentler;
  return dizi.map((s) => s.metin).join(" ");
}
console.log("\nmantiksal sira : " + SEGMENTLER.map((s) => s.metin).join(" "));
console.log("gorunen sira   : " + gorunenSira(SEGMENTLER, "rtl"));

// 5. Kaydirma ve klavye: ok tuslarinin anlami degismez.
const TUSLAR = [
  { tus: "Sag ok", ltr: "sonraki oge", rtl: "onceki oge" },
  { tus: "Sol ok", ltr: "onceki oge", rtl: "sonraki oge" },
  { tus: "Home", ltr: "ilk oge", rtl: "ilk oge" },
  { tus: "End", ltr: "son oge", rtl: "son oge" },
];
console.log("\ntus       soldan saga        sagdan sola");
for (const t of TUSLAR) console.log(`  ${t.tus.padEnd(9)} ${t.ltr.padEnd(18)} ${t.rtl}`);
console.log("ok tuslari fiziksel yonu izler: sag ok her zaman ekranda saga gider,");
console.log("dolayisiyla sagdan sola duzende bir onceki ogeye ulasir.");

// 6. Denetim: fiziksel bildirim kalan bilesenler yayina cikamaz.
const kalan = BILDIRIMLER.filter((b) => yatay(b.bildirim));
const bilesenler = [...new Set(kalan.map((b) => b.bilesen))];
console.log(`\nyon duyarli fiziksel bildirim tasiyan bilesen: ${bilesenler.length}`);
for (const b of bilesenler) {
  const sayi = kalan.filter((x) => x.bilesen === b).length;
  console.log(`  ${b.padEnd(17)} ${sayi} bildirim`);
}
bilesen           fiziksel bildirim     mantiksal karsilik        yon duyarli
kayit-karti       padding-left          padding-inline-start      evet
kayit-karti       border-left           border-inline-start       evet
kayit-karti       margin-top            margin-block-start        hayir
suzgec-paneli     width                 inline-size               evet
suzgec-paneli     text-align: left      text-align: start         evet
odunc-dugmesi     margin-right          margin-inline-end         evet
bildirim-seridi   left                  inset-inline-start        evet
bildirim-seridi   border-bottom         border-block-end          hayir
yon duyarli bildirim: 6 / 8
dikey eksendeki bildirimler yon degisiminden etkilenmez; yine de mantiksal
yazilmalari dikey yazim kiplerinde ayni kazanci verir.

oge                   aynalanir  gerekce
  geri oku             evet       yonu akisa bagli
  ileri oku            evet       yonu akisa bagli
  kirinti ayiraci      evet       hiyerarsi yonunu gosterir
  ilerleme cubugu      evet       artis yonu akisi izler
  saat simgesi         hayir      gercek dunyada yonu sabit
  onay isareti         hayir      yon anlam tasimaz
  arama buyuteci       hayir      nesnenin kendi bicimi
  ses seviyesi simgesi evet       artis yonu akisi izler
  kalem/duzenle        hayir      nesnenin kendi bicimi
aynalanan: 5 / 9

paragraf temel yonu: rtl
segment      yon   yalitim gerekir mi
  raf kodu    rtl   hayir
  QB-141      ltr   evet
  yil         rtl   hayir
  1998        ltr   evet
yalitimsiz birlestirmede soldan saga segmentlerin komsu noktalama isaretleri
yanlis tarafa kayar; bu yuzden gomulu segment yalitilir.

mantiksal sira : raf kodu QB-141 yil 1998
gorunen sira   : 1998 yil QB-141 raf kodu

tus       soldan saga        sagdan sola
  Sag ok    sonraki oge        onceki oge
  Sol ok    onceki oge         sonraki oge
  Home      ilk oge            ilk oge
  End       son oge            son oge
ok tuslari fiziksel yonu izler: sag ok her zaman ekranda saga gider,
dolayisiyla sagdan sola duzende bir onceki ogeye ulasir.

yon duyarli fiziksel bildirim tasiyan bilesen: 4
  kayit-karti       2 bildirim
  suzgec-paneli     2 bildirim
  odunc-dugmesi     1 bildirim
  bildirim-seridi   1 bildirim

Çıktının ilk bölümü sekiz bildirimin altısının yön duyarlı olduğunu gösteriyor. Dikey eksendeki iki bildirim yön değişiminden etkilenmez; yine de mantıksal yazılmaları, dikey yazım kiplerinde aynı kazancı verir. Kural basittir: yatay eksene dokunan her bildirim mantıksal yazılır ve bu, çeviri başlamadan önce alınması gereken bir karardır.

Son bölüm aynı veriyi bir denetim çıktısına çeviriyor: dört bileşen hâlâ fiziksel bildirim taşıyor. Bu liste, bir dilin yayına alınmasından önce kapatılması gereken iş kalemidir ve Belirteçler konusundaki denetimlerle aynı biçimde otomatikleştirilir.

Her Simge Aynalanmaz

İkinci bölüm simgeleri ayırıyor. Aynalanma ölçütü tek bir sorudur: simgenin yönü akışa mı bağlı, yoksa nesnenin kendi biçimi mi? İleri oku akışa bağlıdır ve aynalanır; kırıntı ayıracı hiyerarşinin yönünü gösterir ve aynalanır; ilerleme çubuğu artış yönünü akıştan alır ve aynalanır.

Saat simgesi aynalanmaz, çünkü saatin yönü gerçek dünyada sabittir. Onay işareti aynalanmaz, çünkü yönü anlam taşımaz. Büyüteç ve kalem aynalanmaz, çünkü bunlar nesnenin kendi biçimidir. Dokuz simgenin beşi aynalanıyor; ayrım simgenin ne gösterdiğine bakılarak yapılır, toplu bir dönüşümle değil. Bütün simgeleri aynalayan bir kural, saati ters çevirir.

Sayılar ve Gömülü Terimler Kendi Yönünü Korur

Üçüncü ve dördüncü bölüm iki yönlü metni ele alıyor. Sağdan sola bir paragrafın içindeki sayılar ve Latin harfli terimler — raf kodu, ISBN, ölçüm birimi — kendi yönlerinde yazılır. Paragrafın temel yönü ile segmentin yönü farklı olduğunda, aradaki noktalama işaretlerinin hangi tarafa düşeceği belirsizleşir.

Çözüm gömülü segmenti yalıtmaktır: segment kendi yönünü bildirir ve komşularının yönünü etkilemez. Dördüncü bölümdeki karşılaştırma mantıksal sıra ile görünen sıranın aynı olmadığını gösteriyor — metnin bellekteki sırası ile ekrandaki sırası farklıdır ve bu fark kopyalama, arama ve sıralama işlemlerinde de kendini gösterir.

Klavye Fiziksel Yönü İzler

Beşinci bölüm sık atlanan bir ayrımı yazıyor. Ok tuşları fiziksel yönü izler: sağ ok her zaman ekranda sağa gider. Sağdan sola bir listede ekranda sağa gitmek, listenin bir önceki ögesine gitmek demektir.

Bu, Sekmeler ve Menüler derslerindeki klavye sözleşmelerinin sağdan sola düzende yeniden yazılması gerektiği anlamına gelir: “sağ ok bir sonrakine geçer” cümlesi yön bağımlıdır. Doğru yazım akışa göredir — “akış yönünde bir sonrakine geçer”. Başlangıç ve bitiş tuşları ise yön değişiminden etkilenmez, çünkü ilk ve son öge akışta tanımlıdır.

Ölçülebilir Kısıtlar

  • Yatay eksene dokunan her bildirim mantıksal özelliklerle yazılır; denetim fiziksel bildirim kalan bileşenleri raporlar.
  • Simge aynalaması tek tek karara bağlanır; toplu aynalama saat, onay ve nesne biçimli simgeleri bozar.
  • Gömülü ters yönlü segmentler yalıtılır; yalıtımsız birleştirme noktalama konumunu belirsiz bırakır.
  • Ok tuşu sözleşmeleri fiziksel yön yerine akış yönüyle yazılır.
  • Metin uzaması kuralı sağdan sola dillerde de geçerlidir; iki kısıt birlikte denetlenir.

Sık Yapılan Hata

En sık hata, yön desteğini bir çeviri işi sanıp biçem katmanına hiç dokunmamaktır; bu durumda metin çevrilir ama düzen soldan sağa kalır ve arayüz okunamaz hâle gelir. İkincisi, bütün simgeleri toplu aynalamaktır. Üçüncüsü, yön değişimini yalnız bir kök özniteliğiyle bildirip bileşenlerdeki fiziksel bildirimleri bırakmaktır: bildirim düzeyinde düzeltme yapılmadan kök bildirimi tek başına yeterli değildir.

Özet

  • Sol ve sağ ekranın sabit yönleridir; başlangıç ve bitiş akışa bağlıdır. Yatay eksendeki her bildirim mantıksal yazılır — modeldeki sekiz bildirimin altısı yön duyarlı.
  • Simge aynalaması ölçüte bağlanır: yönü akışa bağlı olan aynalanır, nesnenin kendi biçimi olan aynalanmaz; dokuz simgenin beşi aynalanıyor.
  • Sağdan sola paragrafta sayılar ve Latin harfli terimler kendi yönünü korur ve yalıtılır; metnin mantıksal sırası ile görünen sırası aynı değildir.
  • Ok tuşları fiziksel yönü izler; klavye sözleşmeleri bu yüzden akış yönüyle yazılır.
  • Denetim, fiziksel bildirim taşıyan bileşenleri listeler; bu liste bir dilin yayına alınmasından önce kapatılır.

Sonraki Adım

Yön ve biçim kararları arayüzün kabını dile uyarladı. Geriye kabın içine giren veri kalıyor. Kullanıcıdan ad, adres ve kimlik bilgisi isteyen her form bir varsayım taşır: adın iki parçadan oluştuğu, adresin bir posta koduyla tamamlandığı, kimliğin belli bir uzunlukta olduğu. Bu varsayımların hepsi bir yerde kırılır. Kursun son dersi bu alanları ele alır ve varsayımları kurala çevirir.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat