AB İhaleleri (TED): başlık ve açıklamalar Türkçe
- server/ted-ceviri.mjs: TED'in kendi Türkçe alanı varsa onu kullanır; yoksa OpenRouter ile toplu çevirir (deepseek-v4-flash → gemini 3.7 flash → glm), sonucu server/data/ted.sqlite'ta ilan numarasına göre saklar - İstek en fazla 12 sn bekler, kalan çeviriler arka planda sürer; yanıt ceviriBekleniyor bayrağı taşır, ön yüz sessizce yeniden çeker - Kartta Türkçe başlık + küçük özgün başlık, Türkçe açıklama (3 satır), ülke kodları Türkçe ad (TUR → Türkiye, AUT → Avusturya…) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -47,6 +47,12 @@ const day = (v) => { const s = first(v); return s ? String(s).slice(0, 10) : nul
|
||||
|
||||
const NATURE_TR = { works: 'Yapım İşi', supplies: 'Mal Alımı', services: 'Hizmet Alımı' };
|
||||
|
||||
// Çok dilli alanda Türkçe varyant (varsa)
|
||||
function turTxt(v) {
|
||||
if (v && typeof v === 'object' && !Array.isArray(v) && typeof v.tur === 'string' && v.tur.trim()) return v.tur.trim();
|
||||
return null;
|
||||
}
|
||||
|
||||
function mapNotice(n) {
|
||||
const pn = n['publication-number'];
|
||||
const bedel = n['result-value-notice'] ?? first(n['estimated-value-lot']);
|
||||
@@ -72,6 +78,8 @@ function mapNotice(n) {
|
||||
sonucIlani: String(n['notice-type'] || '').startsWith('can'),
|
||||
cpv: uniq(n['classification-cpv']),
|
||||
aciklama: txt(n['description-lot']),
|
||||
baslikTur: turTxt(n['notice-title']),
|
||||
aciklamaTur: turTxt(n['description-lot']),
|
||||
link: n.links?.html?.ENG || (pn ? `https://ted.europa.eu/en/notice/-/detail/${pn}` : null),
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user