Dil Paketleri

1.7k görüntülenme Markdown

Kurulu dilleri gören, ayarlayan ve kaldıran yedi uç.

Genel Bakış

Bir dil WISECP'de üç yerde birden yaşar: paket dosyası (ad, ülke, sıra, durum), çeviri dosyaları ve dil tabloları (ürün adları, kategori başlıkları, bildirim şablonları). Bu makale ilkini ve bütününü yönetir.

Diller WISECP ile birlikte gelir; ne panelden ne API'den yeni dil oluşturulur. Kapalı duran bir dil açıldığında dil tabloları varsayılandan doldurulur, yani boş başlamaz.

Bir dil varsayılandır ve o dil ayrıcalıklıdır: kapatılamaz, silinemez ve adreslerinde dil ön eki taşımaz. Varsayılanı taşımak bu üç davranışı iki dil arasında yer değiştirir.

Referans

Kurulu Dilleri Listeleme

get/api/v1/admin/languages
Languages/GetLanguages admin

Kurulumdaki bütün dilleri, kapalı olanlar dahil döndürür.

Dönen alanlar data[] — 15 + meta — 2
keystringDilin anahtarı. Adres yollarında bu değer geçer.
namestringDilin İngilizce adı.
show_namestringMüşteriye gösterilen ad.
codestringDil kodu.
code_hyphenstringDil ve ülke kodu birlikte.
country_idintÜlkenin numarası. Adı için başvuru uçlarına bakın.
country_codestringÜlke kodu.
statusboolDil açık mı.
localboolVarsayılan dil mi. Kurulumda tek bir dil bunu taşır.
rtlboolSağdan sola yazılan bir dil mi.
rankintListedeki sırası.
permalinkboolKalıcı bağlantı desteği.
prefixstringAdres ön eki durumu. Varsayılan dilde kapalı, diğerlerinde açıktır.
copiedstringKopyalandığı kaynak dilin adı.
created_atstringOluşturulduğu an.
countintDil sayısı. Meta altında döner.
defaultstringVarsayılan dilin anahtarı.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/languages' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/languages', {
  headers: { Authorization: `Bearer ${apiKey}` },
});

const { data, meta } = await res.json();
const live = data.filter((l) => l.status);
$ch = curl_init('https://panel.ornek.com/api/v1/admin/languages');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Kapalilar da gelir; musteriye acik dilleri status ile suzun.
$r    = Api::Languages()->GetLanguages();
$live = array_values(array_filter($r['data'], fn ($l) => $l['status']));
$def  = $r['meta']['default'];

İndirilebilir Dilleri Listeleme

get/api/v1/admin/languages/available
Languages/GetAvailableLanguages admin uzak servis

WISECP çeviri servisinden kurulabilecek dilleri döndürür.

Dönen alanlar data[] + meta — 1
dataobject[]Uzak servisin döndürdüğü dil tanımları. Servise ulaşılamazsa boş liste gelir.
countintDönen dil sayısı. Meta altında döner.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/languages/available' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/languages/available', {
  headers: { Authorization: `Bearer ${apiKey}` },
});

const { data, meta } = await res.json();
if (meta.count === 0) showRetry();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/languages/available');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// BOS LISTE iki anlama gelir: hicbiri yok ya da uzak servise ulasilamadi. Ayirt edilemez.
$out = Api::Languages()->GetAvailableLanguages();
if (! $out['data']) $logger->warning('dil listesi bos — servis erisimini dogrulayin');

Tek Dili Okuma

get/api/v1/admin/languages/{key}
Languages/GetLanguage admin

Tek bir dil paketini döndürür.

Dönen alanlar data — 15
dataobjectDil paketi. Listeleme ucundaki öğeyle aynı şekildedir.
Hatalar 2
language_not_found404Dil bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/languages/de' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch(`https://panel.ornek.com/api/v1/admin/languages/${key}`, {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/languages/' . $key);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Anahtar dil KODU degildir: ikinci bir ulke icin ayni kod 'en-gb' bicimini alir.
$pkg = Api::Languages()->GetLanguage(['key' => $key])['data'];

Dil Oluşturma (Kapalı)

post/api/v1/admin/languages
Languages/CreateLanguage admin her zaman reddedilir

Diller WISECP ile birlikte gelir; ne panelden ne buradan yeni dil oluşturulur.

Adres, mevcut entegrasyonlar 404 yerine açık bir yanıt alsın diye yerinde durur. Her çağrı, gövdesi ne olursa olsun 422 ile reddedilir ve hiçbir şey yazılmaz. Bir dil üzerinde çalışmak için kurulu bir dili Dil Ayarlarını Değiştirme ve çeviri uçlarıyla düzenleyin.

Hatalar 2
language_create_disabled422Dil oluşturma kapalı; bunun yerine kurulu bir dili düzenleyin.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

Dil Ayarlarını Değiştirme

patch/api/v1/admin/languages/{key}
Languages/UpdateLanguage admin varsayılan yapmak ağırdır

Gönderdiğiniz alanları değiştirir ve dili varsayılan yapabilir.

Gövde 5
show_namestringMüşteriye gösterilen ad. Gönderirseniz boş olamaz.
rankintListedeki sırası.
rtlintSağdan sola yazılıyorsa 1.
statusintDil açık mı. Varsayılan dilde yok sayılır.
localintBu dili varsayılan yapmak için 1. İki dilin adres ön ekini birden değiştirir.
Dönen alanlar data — 15
dataobjectGüncel dil paketi.
Hatalar 3
language_not_found404Dil bulunamadı.
show_name_required422Gönderilen ad boş.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/languages/de' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"show_name":"Deutsch","rank":2}'
const res = await fetch(`https://panel.ornek.com/api/v1/admin/languages/${key}`, {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ show_name: 'Deutsch', rank: 2 }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/languages/' . $key);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['show_name' => 'Deutsch', 'rank' => 2]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// VARSAYILAN dilde status GORMEZDEN GELINIR: yanit 200 doner ama dil acik kalir.
$pkg = Api::Languages()->UpdateLanguage(['key' => $key, 'status' => 0])['data'];
if ($pkg['status']) $logger->info('varsayilan dil kapatilamaz — degisiklik uygulanmadi');

Dili Açma ve Kapatma

put/api/v1/admin/languages/{key}/status
Languages/SetLanguageStatus admin

Dili müşteriye açar ya da kapatır.

Gövde 1
statusintreqYeni durum: 0 kapalı, 1 açık.
Dönen alanlar data — 2
keystringDilin anahtarı.
statusboolGüncel durum.
Hatalar 5
language_not_found404Dil bulunamadı.
invalid_status422Durum 0 ya da 1 değil.
language_is_default422Varsayılan dil kapatılamaz.
no_change422Dil zaten istediğiniz durumda.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PUT 'https://panel.ornek.com/api/v1/admin/languages/de/status' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"status":1}'
const res = await fetch(`https://panel.ornek.com/api/v1/admin/languages/${key}/status`, {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ status: 1 }),
});

if (res.status === 422) { /* zaten aciksa buraya duser */ }
$ch = curl_init('https://panel.ornek.com/api/v1/admin/languages/' . $key . '/status');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['status' => 1]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Ayni durumu tekrar yazmak HATA verir; toplu esitlemede once mevcut durumu okuyun.
$pkg = Api::Languages()->GetLanguage(['key' => $key])['data'];
if ($pkg['status'] !== $wanted) Api::Languages()->SetLanguageStatus(['key' => $key, 'status' => (int) $wanted]);

Dili Kaldırma

delete/api/v1/admin/languages/{key}
Languages/DeleteLanguage admin geri alınamaz

Dili, çevirilerini ve dile ait bütün satırları kaldırır.

Dönen alanlar data — 2
deletedboolSilme çalıştı mı.
keystringSilinen dilin anahtarı.
Hatalar 4
language_not_found404Dil bulunamadı.
language_is_default422Varsayılan dil silinemez.
remove_tables_failed500Dil tablosu satırları silinemedi.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/languages/de' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch(`https://panel.ornek.com/api/v1/admin/languages/${key}`, {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/languages/' . $key);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Urun/kategori adlarinin O DILDEKI satirlari da gider; once disa aktarip saklayin.
$dump = Api::Languages()->ExportLanguageTranslations(['key' => $key])['data'];
file_put_contents("backup-$key.json", json_encode($dump));

Api::Languages()->DeleteLanguage(['key' => $key]);

Tuzaklar

Oluşturulan anahtar gönderdiğiniz kod olmayabilir

Gönderdiğiniz dil kodu kurulumda zaten varsa yeni dilin anahtarı kod-ülke biçimini alır. İkinci bir İngilizce kurmak en değil en-gb üretir. Anahtarı yanıttan okuyun; sonraki her çağrı onu ister.

Varsayılanı taşımak iki dilin adreslerini değiştirir

Bir dili varsayılan yapmak eski varsayılanın ön ekini açar ve yenisininkini kapatır. Yani iki dilin de genel adresleri değişir ve eski bağlantılar kayar. Bu iş ayrıca ayar dosyasını yeniden yazar, yeni dili zorla açar. Yayında olan bir kurulumda bunu plansız yapmayın.

İki yol aynı durumu farklı işler

Durum ucu varsayılan dili kapatmayı 422 ile reddeder. Ayar ucu ise aynı isteği sessizce yok sayar ve 200 döndürür; dil açık kalır. İkisini karıştıran bir betik kapattığını sanır. Yanıttaki duruma bakın.

Aynı durumu yazmak hata döner

Durum ucu istenen durum mevcut durumla aynıysa no_change ile 422 döner. Yani bu uç tekrar edilebilir değildir: bütün dilleri "açık" hâle getiren bir eşitleme döngüsü zaten açık olanlarda hata alır. Yazmadan önce mevcut durumu okuyun.

Silme çeviriden fazlasını götürür

Dili silmek çeviri dosyalarını, bildirim şablonlarını ve dil tablosu satırlarını kaldırır: o dildeki ürün adları, kategori başlıkları ve sayfa içerikleri de gider. Geri dönüş yolu yalnız yedektir. Silmeden önce çevirileri dışa aktarın.

Boş indirilebilir listesi hata anlamına gelebilir

İndirilebilir diller uzak bir servisten gelir. Servise ulaşılamazsa uç hata döndürmez, boş liste döner. Bu yüzden "hiç dil yok" ile "servise ulaşılamadı" aynı görünür. Boş sonucu bir arayüzde "seçenek yok" diye göstermeden önce yeniden deneme yolu bırakın.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.