AmberDB
view release on metacpan or search on metacpan
docs/TR.AmberDB-Locale_Kullanim_Rehberi.md view on Meta::CPAN
`AmberDB::Locale`, çok dilli uygulamalar için tasarlanmıŠ**yerel (locale) duyarlı bir metin iÅleme motorudur**. Perl dilinde yazılmıŠolup aÅaÄıdaki temel yetenekleri sunar:
| Yetenek | Açıklama |
|---|---|
| Büyük/küçük harf dönüÅümü | Dil kurallarına uygun `uc`, `lc`, `ucfirst` |
| Sıralama | Unicode Collation Algorithm (UCA) tabanlı |
| ASCII dönüÅümü | Aksanlı karakterleri düz ASCII'ye çevirme (slug, ID üretimi) |
| Sayı â Metin | Fatura/belge yazımı için sayıların yazıyla ifadesi |
| Tarih/saat biçimlendirme | Locale özgü tarih formatları |
| Sayı/para birimi biçimlendirme | Binlik ayraç, ondalık ayraç, sembol yerleÅimi |
| HTML entity çözümleme | Named + numeric entity decode |
| ÃoÄul kuralları | CLDR tabanlı plural form seçimi |
| UTF-8 güvenli substring | Karakter bazlı kesme (byte deÄil) |
**Mimari prensip:** Motor mantıÄı `AmberDB::Locale.pm`'de, dil verileri ise `AmberDB::Locale::Lang::*` paketlerinde **saf data** olarak tutulur. Motor ve veri tamamen ayrılmıÅtır.
---
## 2. Mimari
```
AmberDB::Locale â Ana motor (tüm mantık burada)
âââ AmberDB::Locale::Lang::gb â Global Base veri (varsayılan/fallback)
âââ AmberDB::Locale::Lang::en â İngilizce veri
âââ AmberDB::Locale::Lang::tr â Türkçe veri
âââ AmberDB::Locale::Lang::de â Almanca veri
âââ AmberDB::Locale::Lang::fr â Fransızca veri
âââ AmberDB::Locale::Lang::es â İspanyolca veri
âââ AmberDB::Locale::Lang::ru â Rusça veri
âââ AmberDB::Locale::Lang::az â Azerice veri
âââ AmberDB::Locale::Lang::ar â Arapça veri
âââ AmberDB::Locale::Lang::ja â Japonca veri
âââ AmberDB::Locale::Currency â ISO 4217 evrensel para birimi verisi
```
Her `Lang::*` modülü yalnızca `data()` adlı tek bir subroutine içerir ve bir hash-ref döndürür. **Hiçbir mantık barındırmaz.**
---
## 3. Nesne OluÅturma (Constructor)
```perl
use AmberDB::Locale;
# 1) Named-param API (önerilen)
my $lang = AmberDB::Locale->new(language => "tr");
# 2) Hashref API
my $lang = AmberDB::Locale->new({ language => "de" });
# 3) Pozisyonel string API
my $lang = AmberDB::Locale->new("fr");
# 4) Argümansız â varsayılan "gb" (Global Base)
my $lang = AmberDB::Locale->new();
```
### Dahili davranıÅlar
- **Ãnbellekleme:** Aynı dil için ikinci `new()` çaÄrısı mevcut nesneyi döndürür (singleton benzeri).
- **Alias desteÄi:** `"global"`, `"gl"`, `"turkish"`, `"tr_tr"`, `"tr-tr"` gibi etiketler otomatik olarak eÅlenir.
- **Fallback:** Bilinmeyen bir dil istenirse `cluck` ile uyarı verilir ve `gb`'ye düÅülür.
- **Collator:** `Unicode::Collate::Locale` yüklenmeye çalıÅılır; baÅarısız olursa `Unicode::Collate` tabanına, o da yoksa özel `sort_map` Schwartzian transform'una düÅülür.
### AmberDB entegrasyonu
```perl
# cfg üzerinden dil otomatik çekilir
my $db = AmberDB->new(cfg => { language => "tr" });
$db->uc("ıÄdır"); # kalıtım yoluyla çalıÅır
```
---
## 4. Dil Veri Yapısı (`data()` Hash-Ref)
Her dil modülünün döndürdüÄü yapının tam Åeması:
```perl
{
uc_map => { }, # uc() öncesi karakter eÅleme
lc_map => { }, # lc() öncesi karakter eÅleme
sort_map => { }, # Ãzel sıralama aÄırlıkları (collator yoksa)
alphabet_chars => "...", # normalize() için güvenli karakter sınıfı
accent_map => { }, # normalize() aksan â yerel eÅdeÄer
ascii_map => { }, # to_ascii() NFD öncesi ön eÅleme
numbers => { }, # num2text sayı kelimeleri
html_entities => { }, # Locale'e özgü ek HTML entity'ler
months => [ ], # 12 elemanlı ay adları
days => [ ], # 7 elemanlı gün adları (Pazar â Cumartesi)
number_format => { }, # Ondalık/binlik ayraç ayarları
default_currency => "",
currency_position => "prefix|suffix",
currency_space => 0|1,
date_format => { }, # short, medium, long, full, time, datetime
plural_rule => "...", # CLDR çoÄul kural ifadesi
}
```
---
## 5. Public API - Metot Referansı
### 5.1 Büyük/Küçük Harf DönüÅümleri
#### `uc($string)` - Büyük harfe çevir
```perl
my $tr = AmberDB::Locale->new(language => "tr");
$tr->uc("ıÄdır"); # "IÄDIR"
$tr->uc("istanbul"); # "İSTANBUL" (i â İ, Türkçe kural)
my $de = AmberDB::Locale->new(language => "de");
$de->uc("straÃe"); # "STRASSE" (Ã â SS)
```
> **Türkçe detay:** `uc_map` içinde `'i' => "\x{130}"` eÅlemesi Perl'in `CORE::uc()` çaÄrısından **önce** uygulanır. Böylece `i â İ` dönüÅümü doÄru yapılır.
#### `lc($string)` - Küçük harfe çevir
```perl
( run in 0.446 second using v1.01-cache-2.11-cpan-4716db65a44 )