Çeviri Dizeleri
Çeviri dizelerini arayan, düzenleyen, silen ve taşıyan beş uç.
Genel Bakış
Çeviri dizeleri veritabanında değil dosyalarda yaşar. Her dizenin bir tam anahtarı vardır ve o anahtar hangi dosyada durduğunu da söyler: needs/button-save gibi.
Anahtarın başı dizeyi üç kümeden birine yerleştirir: müşteri yüzü, yönetim paneli ve geri kalan sistem metinleri. Arama sonucu bu üç küme altında gruplanır.
Yazmanın iki yolu vardır ve bilerek farklıdırlar. Toplu düzenleme katıdır: tanımadığı bir anahtar gördüğünde hiçbir şey yazmaz. İçe aktarma hoşgörülüdür: tanımadığını atlar, gerisini yazar.
Referans
Çevirilerde Arama
Aradığınız metni taşıyan çeviri dizelerini gruplu döndürür.
curl 'https://panel.ornek.com/api/v1/admin/languages/de/translations?search=Save' \
-H "Authorization: Bearer $API_KEY"const url = new URL(`https://panel.ornek.com/api/v1/admin/languages/${key}/translations`);
url.searchParams.set('search', term);
const res = await fetch(url, { headers: { Authorization: `Bearer ${apiKey}` } });
const { data, meta } = await res.json();
if (meta.truncated) narrowTheSearch();$qs = http_build_query(['search' => $term]);
$ch = curl_init('https://panel.ornek.com/api/v1/admin/languages/' . $key . '/translations?' . $qs);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Arama BUYUK-KUCUK harfe duyarlidir: 'save' ile 'Save' ayni sonucu vermez.
$r = Api::Languages()->GetLanguageTranslations(['key' => $key], ['search' => 'Save']);
if ($r['meta']['truncated']) $logger->info('sonuc yuzde kesildi — aramayi daraltin');Çevirileri Toplu Düzenleme
Verdiğiniz anahtarların karşılıklarını yazar, gerisine dokunmaz.
curl -X PUT 'https://panel.ornek.com/api/v1/admin/languages/de/translations' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"translations":{"needs/button-save":"Speichern"}}'const res = await fetch(`https://panel.ornek.com/api/v1/admin/languages/${key}/translations`, {
method: 'PUT',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
translations: {
'needs/button-save': 'Speichern',
'admin/services/page-list': 'Dienste',
},
}),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/languages/' . $key . '/translations');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'translations' => ['needs/button-save' => 'Speichern'],
]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// TEK gecersiz anahtar tum yigini reddeder; toplu yukleme icin ice aktarma ucunu secin.
Api::Languages()->UpdateLanguageTranslations([
'key' => $key, 'translations' => ['needs/button-save' => 'Speichern'],
]);Tek Çeviriyi Silme
Tek bir çeviri dizesini dosyasından kaldırır.
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/languages/de/translations' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"key":"needs/button-save"}'const res = await fetch(`https://panel.ornek.com/api/v1/admin/languages/${lang}/translations`, {
method: 'DELETE',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ key: 'needs/button-save' }),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/languages/' . $lang . '/translations');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['key' => 'needs/button-save']),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Silinen anahtari arayan ekran BOS metin basar; ceviriyi bosaltmak yerine duzeltmeyi dusunun.
Api::Languages()->UpdateLanguageTranslations([
'key' => $lang, 'translations' => ['needs/button-save' => 'Speichern'],
]);Çevirileri Dışa Aktarma
Dilin bütün çeviri dizelerini düz bir harita olarak döndürür.
curl 'https://panel.ornek.com/api/v1/admin/languages/de/translations/export' \
-H "Authorization: Bearer $API_KEY" > de.jsonconst res = await fetch(`https://panel.ornek.com/api/v1/admin/languages/${key}/translations/export`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const { data, meta } = await res.json();
console.log(`${meta.count} dize`);$ch = curl_init('https://panel.ornek.com/api/v1/admin/languages/' . $key . '/translations/export');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Cikti JSON'dur, tablo dosyasi DEGIL; panelin sundugu tablo bicimi bu ucta yoktur.
$dump = Api::Languages()->ExportLanguageTranslations(['key' => $key])['data'];
file_put_contents("$key.json", json_encode($dump, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));Çevirileri İçe Aktarma
Bir çeviri haritasını toplu yazar ve tanımadığı anahtarları atlar.
curl -X POST 'https://panel.ornek.com/api/v1/admin/languages/de/translations/import' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"translations":{"needs/button-save":"Speichern"}}'const res = await fetch(`https://panel.ornek.com/api/v1/admin/languages/${key}/translations/import`, {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ translations: map }),
});
const { data } = await res.json();
if (data.skipped_files.length) reportSkipped(data.skipped_files);$ch = curl_init('https://panel.ornek.com/api/v1/admin/languages/' . $key . '/translations/import');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['translations' => $map]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Tanimadigi anahtari SESSIZCE atlar; atlananlari saymazsaniz eksik ceviri fark edilmez.
$out = Api::Languages()->ImportLanguageTranslations(['key' => $key, 'translations' => $map])['data'];
if ($out['skipped_files']) $logger->warning('atlanan anahtar', $out['skipped_files']);Tuzaklar
Toplu düzenleme tek bir geçersiz anahtar yüzünden tüm yığını reddeder ve hiçbir şey yazmaz. İçe aktarma aynı anahtarı sessizce atlar, gerisini yazar. Elle düzeltmede birincisini, dış bir dosyayı yüklerken ikincisini seçin.
İçe aktarma atladığı anahtarları skipped_files altında sayar ve başka hiçbir yerde bildirmez. Yanıtı okumayan bir betik, çevirilerin bir bölümünü yazmadığını hiç öğrenemez. Bu alanı her koşuda denetleyin.
Arama yüzüncü eşleşmede durur ve total alanı toplanan sayıyı verir, var olan toplamı değil. truncated doğruysa daha fazlası vardır ve kaç tane olduğu bilinmez. Bu sayıyı bir ilerleme göstergesine bağlamayın.
Arama metni birebir karşılaştırılır: save aramak Save dizesini bulmaz. Bir metni tüm kurulumda değiştirmeye çalışıyorsanız aynı kelimeyi her yazımıyla ayrı ayrı arayın.
Silme ucunda adres dil anahtarını, gövde ise çeviri anahtarını taşır. İkisi de key adını kullanır. Gövdeye dil anahtarını yazmak geçersiz çeviri anahtarı hatası verir; bunu dilin bulunamaması sanmayın.
Panelin sunduğu tablo çıktısı ile uzaktan çekme bu uçlarda yoktur; dışa aktarma düz bir harita döndürür ve içe aktarma aynı haritayı bekler. İkisi birbirinin simetriğidir, yani bir dili dışa aktarıp başka bir kuruluma olduğu gibi yükleyebilirsiniz.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.