# Dil ve Çeviri Kancaları

https://dev.wisecp.com/tr/dil-ve-ceviri-kancalari

Metnin yedi kancası: çeviriyi çözme, kaydetme, paketi süpürme ve dil ekleme, silme, ayarlama.

## Genel Bakış

Metnin yolu iki yönlüdür: bir anahtar **çözülür** ve ekrana gider, ya da bir çeviri **kaydedilir** ve diske yazılır. Her iki uçta birer filtre bulunur.

Yanlarında dil paketinin kendi olayları durur: paket açma, silme ve ayar değişikliği. Yeni bir paket boş doğmaz; var olan bir dilden kopyalanır.

## Referans

### Çözülen metni değiştirme

filteri18n.translation

`Language::g` bağla geçer

Bir çeviri anahtarı metne çevrildikten sonra çalışır. Sistemdeki **her** metin buradan geçer: sıcak bir yoldur, hafif tutun.

Parametreler 3

$valuestringbağlaÇözülmüş metin. Üzerine yazdığınız hâli sonuçtur.

$keystringİstenen anahtar.

$langstringÇözümde kullanılan dil.

Dönüş 1

voidDönüş yoksayılır; metnin üzerine yazarsınız. Dokunmazsanız özgün metin döner.

Dinleyici PHP

```php
Hook::add('filter:i18n.translation', 10, function (&$value, $key, $lang) {
    // Her metin buradan gecer: once anahtari eleyin.
    if ($key !== 'website/home/title') return;

    $value = Acme::brandedTitle($lang);
});
```

### Kaydedilecek çevirileri düzenleme

filteri18n.translation_save

`AdminLanguages` bağla geçer

Çeviriler diske yazılmadan önce çalışır. Elinizdeki dizi **yazılacak olanın kendisidir**.

Parametreler 2

$valuesarraybağlaAnahtar karşılık değer çiftleri. Değer düz metin olabileceği gibi içerik ve değişkenleri taşıyan bir dizi de olabilir: ikisine de hazır olun.

$idstringHedef dil.

Dönüş 1

voidDönüş yoksayılır; dizinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:i18n.translation_save', 10, function (&$values, $id) {
    // Deger duz metin de olabilir, dizi de.
    foreach ($values as $k => $v)
        if (is_string($v)) $values[$k] = trim($v);
});
```

### Çeviri kaydını izleme

actioni18n.translation_saved

`AdminLanguages` yalnız gerçekten yazılanlar

Bir çeviri anahtarı kaydedildikten sonra çalışır.

Parametreler 2

$keystringKaydedilen tam anahtar.

$savedarray**Yalnız gerçekten diske yazılan** dillerin listesi. Gönderilmiş ama değeri değişmemiş diller bu listede **yoktur**: “hangi diller gönderildi” sorusunun cevabı burada değildir.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:i18n.translation_saved', 10, function ($key, $saved) {
    // Liste yalniz DEGISENLERI tasir, gonderilenleri degil.
    foreach ($saved as $lang) Acme::invalidateCache($lang, $key);
});
```

### Toplu değiştirmeyi izleme

actioni18n.bulk_replaced

`AdminLanguages` tek dil paketi

Bir dil paketinde toplu kelime değiştirme yapıldıktan sonra çalışır.

Parametreler 4

$langstringSüpürmenin uygulandığı **tek** dil.

$wordstringAranan ham kelime; desen değildir.

$replacementstringYerine yazılan metin. Geri başvuru olarak **yorumlanmaz**: içindeki değerler düz metin olarak yazılır.

$changedintDeğeri **gerçekten değişen anahtar** sayısı; seçilen anahtar sayısı değil.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:i18n.bulk_replaced', 10, function ($lang, $word, $replacement, $changed) {
    // Sayac degisenleri tasir: secilenleri degil.
    Acme::auditSweep($lang, $word, $changed);
});
```

### Dil eklenmesini izleme

actionlanguage.added

`AdminLanguages` kopyalanarak açılır

Yeni bir dil paketi açıldıktan sonra çalışır. Paket sıfırdan doğmaz: var olan bir dilden **kopyalanarak** kurulur.

Parametreler 2

$keystringYeni dilin anahtarı.

$copied_fromstringİçeriğin kopyalandığı kaynak dil. Yeni paket ilk anda kaynağın metinleriyle doludur: “çevrilmemiş” değil, **yanlış dilde** görünür.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:language.added', 10, function ($key, $copied_from) {
    // Paket kaynagin metinleriyle dolu baslar: ceviri kuyruguna alin.
    Acme::queueTranslation($key, $copied_from);
});
```

### Dil silinmesini izleme

actionlanguage.deleted

`AdminLanguages` silme sonrası

Bir dil paketi silindikten sonra çalışır.

Parametreler 1

$keystringSilinen dilin anahtarı.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:language.deleted', 10, function ($key) {
    Acme::dropTranslations($key);
});
```

### Dil ayarlarının değişmesini izleme

actionlanguage.settings_updated

`AdminLanguages` yazımdan sonra

Bir dilin ayarları kaydedildikten sonra çalışır.

Parametreler 2

$idstringGüncellenen dilin anahtarı.

$packagearrayDiske yazılan ayarlar: görünen adı, sırası, sağdan sola yazılıp yazılmadığı ve durumu.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:language.settings_updated', 10, function ($id, $package) {
    Acme::syncLocale($id, $package);
});
```

## Tuzaklar

> **Çeviri filtresi sıcak yoldur**
> 
> Sistemdeki **her** metin bu filtreden geçer: tek bir sayfada yüzlerce kez. Ağır bir iş koymadan önce anahtarı eleyin, ilgilenmediğiniz çağrılardan hemen çıkın.

> **Kaydedilen diller listesi gönderilenleri göstermez**
> 
> Çeviri kaydı olayının taşıdığı liste **yalnız değeri gerçekten değişen** dilleri içerir. Gönderilmiş ama aynı kalan diller listede yoktur; “hangi diller gönderildi” sorusunu buradan cevaplamayın.

## İlgili Makaleler

- [Kancalar Nasıl Çalışır](https://dev.wisecp.com/tr/kancalar-nasil-calisir)
- [Kanca Alanları](https://dev.wisecp.com/tr/kanca-alanlari)
- [Kanca Dinleyicisi Yazma](https://dev.wisecp.com/tr/kanca-dinleyicisi-yazma)
