---
title: 'Bölgesel Gereklilikler'
source: 'https://academia.sh/tr/kurslar/erisilebilir-kaliplar/bolgesel-gereklilikler'
course: 'Erişilebilir Bileşen Kalıpları'
language: tr
updated: '2026-08-17T18:09:34+00:00'
license: 'CC BY-SA 4.0'
---

# Bölgesel Gereklilikler

Ad, adres ve kimlik alanlarındaki varsayımların sayılması, esnek alan kurulumunun bütün kayıtları alması, zorunlulukların ülke tablosundan okunması ve kimlik alanının metin olarak saklanması.

Yön ve biçim kararları arayüzün kabını dile uyarladı. Geriye kabın içine giren veri
kalıyor. Kütüphane üyeliği formu üç şey ister: ad, adres ve bir kimlik numarası. Bu üç
alanın her biri 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.

Varsayımlar çoğu kayıtta görünmez, çünkü çoğu kayıt onlara uyar. Uymayan kayıt ise formu
dolduramaz: kullanıcı adını bir alana sığdıramaz, zorunlu posta kodu alanını boş
bırakamaz ve kimlik numarası kabul edilmez. Bu ders varsayımları sayar ve kurala çevirir.

## Varsayımın Ölçülmesi

Aşağıdaki hesap katı bir formu — iki adlı ad alanı, zorunlu posta kodu ve bölge, sabit
uzunlukta kimlik — örnek kayıtlar üzerinde çalıştırır ve kaçının geçemediğini sayar.

```js
// bolge.mjs — ad, adres ve kimlik alanlarindaki varsayimlarin kurala cevrilmesi

// 1. Ad alani: kati form iki alan varsayar (ad + soyad, ikisi de zorunlu).
const KATI_AD = { alanlar: ["ad", "soyad"], zorunlu: ["ad", "soyad"], enAz: 2 };
// Kayitlar: gercek dunyada karsilasilan ad yapilari (uydurma ornekler, yapi cesitliligi icin).
const ADLAR = [
  { kayit: "A1", parcalar: ["Elif", "Yılmaz"], not: "iki parca" },
  { kayit: "A2", parcalar: ["Ravi"], not: "tek parcali ad" },
  { kayit: "A3", parcalar: ["María", "del", "Carmen", "Ruiz", "García"], not: "iki soyadli, coklu ad" },
  { kayit: "A4", parcalar: ["Nguyễn", "Thị", "Hoa"], not: "aile adi once" },
  { kayit: "A5", parcalar: ["Björn", "Þórsson"], not: "soyadi baba adindan turer" },
  { kayit: "A6", parcalar: ["Jean", "-", "Pierre", "Le", "Roux"], not: "tireli ad, cok sozcuklu soyad" },
];
console.log("kayit  parca  kati forma sigar mi  kayip");
let sigmayan = 0;
for (const a of ADLAR) {
  const gercekParca = a.parcalar.filter((p) => p !== "-").length;
  const sigar = gercekParca === KATI_AD.enAz;
  if (!sigar) sigmayan++;
  const kayip = sigar ? "-" : gercekParca < 2 ? "zorunlu alan bos birakilamaz" : "fazla parcalar tek alana sikisir";
  console.log(`${a.kayit.padEnd(6)} ${String(gercekParca).padStart(5)}  ${(sigar ? "evet" : "HAYIR").padStart(18)}  ${kayip}`);
}
console.log(`kati forma sigmayan: ${sigmayan} / ${ADLAR.length}`);

// Esnek kural: tek serbest alan + istege bagli gorunen ad.
console.log("\nesnek kural: 'tam ad' tek alan (zorunlu) + 'hitap adi' (istege bagli)");
for (const a of ADLAR) {
  const tam = a.parcalar.join(" ").replace(" - ", "-");
  console.log(`  ${a.kayit}  tam ad: ${JSON.stringify(tam).padEnd(34)} (${a.not})`);
}

// 2. Adres alani: kati form posta kodu ve il/eyalet zorunlu varsayar.
const ADRESLER = [
  { kayit: "B1", satirlar: 2, postaKodu: "34710", bolge: "İstanbul", ulke: "TR" },
  { kayit: "B2", satirlar: 3, postaKodu: null,    bolge: "Dublin",   ulke: "IE" },
  { kayit: "B3", satirlar: 1, postaKodu: "1010",  bolge: null,       ulke: "AT" },
  { kayit: "B4", satirlar: 4, postaKodu: "100-0001", bolge: "Tokyo", ulke: "JP" },
  { kayit: "B5", satirlar: 2, postaKodu: "SW1A 1AA", bolge: null,    ulke: "GB" },
];
const KATI_ADRES = { postaKoduZorunlu: true, bolgeZorunlu: true, satirSiniri: 2 };
console.log("\nkayit  satir  posta kodu  bolge     kati formda dusen kural");
let adresDusen = 0;
for (const b of ADRESLER) {
  const dusenler = [];
  if (KATI_ADRES.postaKoduZorunlu && !b.postaKodu) dusenler.push("posta kodu zorunlu");
  if (KATI_ADRES.bolgeZorunlu && !b.bolge) dusenler.push("bolge zorunlu");
  if (b.satirlar > KATI_ADRES.satirSiniri) dusenler.push(`satir sayisi ${b.satirlar} > ${KATI_ADRES.satirSiniri}`);
  if (dusenler.length) adresDusen++;
  console.log(
    `${b.kayit.padEnd(6)} ${String(b.satirlar).padStart(5)}  ${String(b.postaKodu ?? "-").padEnd(11)} ${String(b.bolge ?? "-").padEnd(9)} ${dusenler.join("; ") || "-"}`
  );
}
console.log(`kati adres formunda dusen kayit: ${adresDusen} / ${ADRESLER.length}`);

// 3. Kimlik alani: uzunluk ve bicim varsayimi.
const KIMLIKLER = [
  { kayit: "C1", deger: "12345678901", tur: "11 hane" },
  { kayit: "C2", deger: "AB-9931",     tur: "harf + rakam" },
  { kayit: "C3", deger: "0012",        tur: "basta sifir" },
  { kayit: "C4", deger: "9987654321234", tur: "13 hane" },
];
const KATI_KIMLIK = { uzunluk: 11, yalnizRakam: true };
console.log("\nkayit  deger           kati kurala uyar mi  neden");
for (const c of KIMLIKLER) {
  const uzunlukTamam = c.deger.length === KATI_KIMLIK.uzunluk;
  const rakamTamam = /^\d+$/.test(c.deger);
  const uyar = uzunlukTamam && rakamTamam;
  const neden = uyar ? "-" : [!uzunlukTamam && `uzunluk ${c.deger.length}`, !rakamTamam && "rakam disi karakter"].filter(Boolean).join(", ");
  console.log(`${c.kayit.padEnd(6)} ${c.deger.padEnd(15)} ${(uyar ? "evet" : "HAYIR").padStart(18)}  ${neden}`);
}
console.log("kimlik alani sayi olarak saklanirsa bastaki sifirlar kaybolur; alan metindir.");

// 4. Sonuc: iki form tasarimi karsilastirmasi.
const kayitToplam = ADLAR.length + ADRESLER.length;
const dusenToplam = sigmayan + adresDusen;
console.log(`\nkati form: ${dusenToplam} / ${kayitToplam} kayit dogrudan girilemiyor (%${Math.round((100 * dusenToplam) / kayitToplam)})`);
console.log("esnek form: tam ad tek alan, adres cok satirli serbest metin + ulke,");
console.log("            posta kodu ve bolge zorunlulugu ulkeye gore acilip kapaniyor.");

// 5. Ulkeye gore alan kurali: tek bir tabloda toplanir.
const ULKE_KURALI = {
  TR: { postaKodu: "zorunlu", bolge: "zorunlu", postaKoduBicimi: "5 hane" },
  IE: { postaKodu: "istege bagli", bolge: "zorunlu", postaKoduBicimi: "serbest" },
  AT: { postaKodu: "zorunlu", bolge: "istege bagli", postaKoduBicimi: "4 hane" },
  JP: { postaKodu: "zorunlu", bolge: "zorunlu", postaKoduBicimi: "3-4 hane" },
  GB: { postaKodu: "zorunlu", bolge: "istege bagli", postaKoduBicimi: "serbest" },
};
console.log("\nulke  posta kodu     bolge          bicim");
for (const [u, k] of Object.entries(ULKE_KURALI)) {
  console.log(`  ${u}  ${k.postaKodu.padEnd(14)} ${k.bolge.padEnd(14)} ${k.postaKoduBicimi}`);
}
console.log("kural tablosu veridir; forma gomulmez, ulke secimiyle okunur.");
```

```
kayit  parca  kati forma sigar mi  kayip
A1         2                evet  -
A2         1               HAYIR  zorunlu alan bos birakilamaz
A3         5               HAYIR  fazla parcalar tek alana sikisir
A4         3               HAYIR  fazla parcalar tek alana sikisir
A5         2                evet  -
A6         4               HAYIR  fazla parcalar tek alana sikisir
kati forma sigmayan: 4 / 6

esnek kural: 'tam ad' tek alan (zorunlu) + 'hitap adi' (istege bagli)
  A1  tam ad: "Elif Yılmaz"                      (iki parca)
  A2  tam ad: "Ravi"                             (tek parcali ad)
  A3  tam ad: "María del Carmen Ruiz García"     (iki soyadli, coklu ad)
  A4  tam ad: "Nguyễn Thị Hoa"                   (aile adi once)
  A5  tam ad: "Björn Þórsson"                    (soyadi baba adindan turer)
  A6  tam ad: "Jean-Pierre Le Roux"              (tireli ad, cok sozcuklu soyad)

kayit  satir  posta kodu  bolge     kati formda dusen kural
B1         2  34710       İstanbul  -
B2         3  -           Dublin    posta kodu zorunlu; satir sayisi 3 > 2
B3         1  1010        -         bolge zorunlu
B4         4  100-0001    Tokyo     satir sayisi 4 > 2
B5         2  SW1A 1AA    -         bolge zorunlu
kati adres formunda dusen kayit: 4 / 5

kayit  deger           kati kurala uyar mi  neden
C1     12345678901                   evet  -
C2     AB-9931                      HAYIR  uzunluk 7, rakam disi karakter
C3     0012                         HAYIR  uzunluk 4
C4     9987654321234                HAYIR  uzunluk 13
kimlik alani sayi olarak saklanirsa bastaki sifirlar kaybolur; alan metindir.

kati form: 8 / 11 kayit dogrudan girilemiyor (%73)
esnek form: tam ad tek alan, adres cok satirli serbest metin + ulke,
            posta kodu ve bolge zorunlulugu ulkeye gore acilip kapaniyor.

ulke  posta kodu     bolge          bicim
  TR  zorunlu        zorunlu        5 hane
  IE  istege bagli   zorunlu        serbest
  AT  zorunlu        istege bagli   4 hane
  JP  zorunlu        zorunlu        3-4 hane
  GB  zorunlu        istege bagli   serbest
kural tablosu veridir; forma gomulmez, ulke secimiyle okunur.
```

## Ad İki Parça Değildir

Çıktının ilk bölümü altı ad kaydının dördünün katı forma sığmadığını gösteriyor. Kayıp iki
biçimde oluşuyor: tek parçalı bir ad zorunlu ikinci alanı dolduramıyor, çok parçalı bir ad
ise fazla parçalarını tek alana sıkıştırıyor. Sıkıştırma kayıp gibi görünmez ama veriyi
bozar: hangi parçanın aile adı olduğu bilgisi kaybolur.

İkinci bölüm esnek kuralı gösteriyor: tek bir zorunlu **tam ad** alanı, isteğe bağlı bir
hitap adı. Bu kurulum altı kaydın altısını da olduğu gibi alır. Hitap adı ayrı sorulur,
çünkü arayüzün "Merhaba X" derken kullanacağı ad tam addan türetilemez — türetme her zaman
bir sıra varsayımı gerektirir.

Ad alanının ikinci kuralı sıralamadır: liste görünümünde adların hangi parçaya göre
sıralanacağı bir arayüz kararıdır ve veriye gömülemez. Sıralama, dile duyarlı karşılaştırma
ile yapılır — Tablolar dersindeki kuralın aynısı.

## Adresin Zorunlu Alanları Ülkeye Bağlıdır

Üçüncü bölüm beş adres kaydının dördünün katı formdan düştüğünü gösteriyor. Düşme nedenleri
ayrı ayrı: bazı yerlerde posta kodu yoktur, bazı yerlerde bölge/eyalet alanı kullanılmaz,
bazı adresler iki satıra sığmaz.

Son bölümdeki tablo çözümü veriyor: zorunluluk kuralı forma gömülmez, **ülkeye göre okunan
bir tablodan** gelir. Kullanıcı ülkeyi seçtiğinde hangi alanların zorunlu olduğu, posta
kodunun hangi biçimi alacağı ve alan etiketlerinin ne olacağı o tablodan belirlenir. Tablo
veridir; yeni bir ülke eklendiğinde kod değişmez, satır eklenir.

Adres alanının üçüncü kuralı satır sayısıdır: çok satırlı serbest metin alanı, yapılandırılmış
alanlardan daha az bilgi kaybeder. Yapılandırma yalnız gerçekten gerekli olduğunda —
kargo hesabı, vergi kaydı — istenir ve o zaman da ülkeye göre değişir.

## Kimlik Alanı Metindir

Dördüncü bölüm kimlik numarasının üç ayrı biçimde katı kuraldan düştüğünü gösteriyor:
farklı uzunluk, rakam dışı karakter ve baştaki sıfır. Sonuncusu en sinsi olanıdır: alan
sayı olarak saklandığında baştaki sıfırlar kaybolur ve değer sessizce bozulur.

Kural şudur: kimlik alanı bir sayı değil, bir **metindir**. Üzerinde aritmetik yapılmaz,
biçimi ülkeye göre değişir ve doğrulaması bir kalıp denetimidir. Doğrulama kalıbı da adres
kuralları gibi ülke tablosundan okunur; forma gömülen tek bir düzenli ifade, ilk yabancı
kayıtta kırılır.

## Ölçünün Anlamı

Beşinci bölüm toplamı veriyor: on bir kaydın sekizi katı formu geçemiyor. Bu sayı örnek
kümesine bağlıdır ve bir istatistik değildir; işlevi, varsayımların **her birinin** bir
kayıt sınıfını dışarıda bıraktığını göstermektir.

Esnek form aynı kayıtların hepsini alır ve karşılığında iki şey ister: alanların serbest
bırakılması ve zorunlulukların veriden okunması. Maliyeti de vardır — serbest metin
alanları üzerinde otomatik çözümleme yapmak zorlaşır. Karar, hangi kaybın kabul
edilebilir olduğuna göre verilir: bir kütüphane üyeliğinde kullanıcıyı dışarıda bırakmak,
adres verisini yapılandıramamaktan daha ağır bir kayıptır.

## Ölçülebilir Kısıtlar

- Ad alanı tek zorunlu serbest alandır; parçalara ayırma yalnız gerçekten gerekliyse ve
  isteğe bağlı olarak yapılır.
- Adres zorunlulukları ülke tablosundan okunur; tablo koda gömülmez.
- Kimlik ve posta kodu alanları metin olarak saklanır; baştaki sıfır korunur.
- Alan etiketleri ve doğrulama iletileri de ülkeye göre değişir; hata iletisi kuralı Hata
  Mesajı Yazımı dersindeki yapıyı izler.
- Zorunlu alan işareti ve hata bildirimi Erişilebilir Hata Sunumu dersindeki gibi alanla
  ilişkilendirilir.

## Sık Yapılan Hata

En sık hata, ad alanını iki zorunlu parçaya bölmektir. İkincisi, posta kodunu her ülke için
zorunlu tutmaktır. Üçüncüsü, kimlik ve posta kodu alanlarını sayı olarak saklamaktır.
Dördüncüsü, bu kuralları ülke tablosu yerine koşullu kodla yazmaktır: her yeni ülke bir kod
değişikliği gerektirir ve kural kümesi zamanla okunamaz hâle gelir.

## Özet

- Ad, adres ve kimlik alanlarının her biri bir varsayım taşır; modeldeki on bir kaydın
  sekizi katı formu geçemiyor.
- Tek zorunlu tam ad alanı bütün ad yapılarını alır; hitap adı ayrı ve isteğe bağlı sorulur,
  çünkü tam addan türetilemez.
- Adres zorunlulukları ve posta kodu biçimi ülkeye göre okunan bir tablodan gelir; tablo
  veridir, forma gömülmez.
- Kimlik ve posta kodu metindir: sayı olarak saklandığında baştaki sıfır kaybolur.
- Esnek formun bedeli otomatik çözümlemenin zorlaşmasıdır; karar hangi kaybın kabul
  edilebilir olduğuna göre verilir.

## Kurs Kapanışı

Bu kurs, bileşenleri görünüşleriyle değil **belirtimleriyle** ele aldı. Temel Bileşenler
konusu düğmeyi, girdiyi, seçim denetimini ve açılır listeyi yerel öge önce kuralıyla
kurdu; her birinin rolünü, adını, durumunu ve klavye sözleşmesini yazdı. Kapsayıcı ve
Gezinme Bileşenleri konusu kartı, sekmeyi, akordeonu, menüyü, konum bildirimini, tabloyu ve
otomatik geçişli şeridi aynı disiplinle belirtti ve her birinde odak ile sekme sırasının
maliyetini saydı. Katman ve Geri Bildirim Bileşenleri konusu akışın üstüne çıkan bileşenleri
— kip pencere, araç ipucu, bildirim, yükleme göstergesi, iskelet, boş ve hata durumu, rozet
— odak devri ve duyuru politikasıyla ele aldı. Metin ve Yerelleştirme konusu ise arayüz
metnini bileşenin parçası hâline getirdi: rehber kuralları, hata iletisinin yapısı,
biçimlemenin yerel ayardan türetilmesi, yön duyarlı düzen ve bu dersteki alan varsayımları.

Kurs boyunca sabit kalan üç ölçüt vardı. Yerel öge varken ARIA yazılmaz. Her durum bir
kanalda değil en az iki kanalda bildirilir. Ve her karar ölçülebilir bir kısıta bağlanır —
hedef boyutu, kontrast oranı, süre sınırı ya da sekme durağı sayısı.

M15 müfredatı burada tamamlanıyor. Arayüz Temelleri görsel kararları algısal ilkelere ve
ölçülebilir eşiklere bağladı. Kullanıcı Deneyimi ve Davranış Tasarımı bu kararların
kullanıcıdan nasıl türetileceğini ve etik sınırının nerede olduğunu kurdu. Tasarım
Sistemleri kararları belirteçlere, kataloğa ve yönetişime çevirerek ölçeklenebilir hâle
getirdi. Erişilebilir Bileşen Kalıpları ise sistemin her parçasının klavye, odak ve ekran
okuyucu davranışını belirtim düzeyinde yazdı.

Bu müfredat, M14 Frontend müfredatındaki uygulama katmanıyla birlikte okunmak üzere
kuruldu: orada bileşenin nasıl **çalıştığı**, burada nasıl **olması gerektiği** anlatıldı.
İki müfredatın kesiştiği yer, bir arayüzün hem doğru çalışması hem de doğru davranmasıdır.
