ÖzelliklerEklentiFiyatlandırmaKaynaklar
Dili Değiştir
KaynaklarXLIFF Dosyaları Nasıl Çevrilir (Drupal, Symfony, Angular, iOS)

XLIFF Dosyaları Nasıl Çevrilir (Drupal, Symfony, Angular, iOS)

SimplePoTranslate Team16 Nisan 2026
XLIFF Dosyaları Nasıl Çevrilir (Drupal, Symfony, Angular, iOS)

Geçen hafta bir Drupal geliştiricisi, kurumsal yerelleştirme ekipleri arasında yılda binlerce kez yaşanan bir hikayeyle Stack Overflow'a bir gönderi attı. Ekibi, Drupal sitelerinden 40 MB'lık bir XLIFF dosyası dışa aktarmıştı. Dosyayı bir metin düzenleyicide açtı, parçaları Google Translate'e yapıştırdı, dosyayı yeniden birleştirdi ve Drupal'a geri aktardı – ancak sayfaların yarısı oluşturulmayı reddetti çünkü çevrilmiş dizeler yanlış biçimlendirilmiş XML, yanlış yerlerde kaçış karakterleri ve satır içi biçimlendirmenin bozulduğu kırık <g> etiketleri içeriyordu.

XLIFF, boşuna kurumsal yerelleştirme standardı değildir. XML tabanlıdır, araçtan bağımsızdır ve ciddi çeviri projelerinin ihtiyaç duyduğu zengin meta verileri destekler: çeviri durumları, alternatif çeviriler, çevirmenler ve geliştiriciler arasındaki notlar ve yapılandırılmış satır içi biçimlendirme. Ancak esnekliği onu kolayca bozmaya elverişli kılar ve .po dosyalarını güvenli bir şekilde işleyen araçlar genellikle XLIFF üzerinde başarısız olur.

Bu kılavuz, XLIFF'i benzersiz kılan şeyleri, genel çeviri yaklaşımlarının neden onu bozduğunu ve 2026'da XLIFF'in en yaygın kullanıldığı dört platform olan Drupal, Symfony, Angular ve iOS için XLIFF dosyalarını çevirmenin doğru yolunu ele alıyor.

XLIFF Nedir (ve Kurumsal Ekipler Neden Kullanır)

XLIFF, XML Localization Interchange File Format'ın kısaltmasıdır. İçerik yönetim sistemleri, çeviri belleği veritabanları, CAT araçları ve yerelleştirme platformları gibi araçlar arasında çeviri içeriğini taşımak için özel olarak tasarlanmış bir OASIS standardıdır. Gettext .po dosyalarından (düz anahtar-değer çiftleri depolar) veya JSON yerel dosyalarından (keyfi olarak iç içe geçer) farklı olarak, XLIFF standartlaştırılmış bir şemaya sahip yapılandırılmış bir XML belgesidir.

XLIFF 1.2 ve XLIFF 2.0

Piyasada iki sürüm bulunmaktadır ve bunlar tam olarak uyumlu değildir.

XLIFF 1.2, daha eski, daha yaygın olarak dağıtılmış sürümdür. Çevrilebilir içeriği sarmalamak için <source> ve <target> alt öğeleriyle birlikte <trans-unit> öğelerini kullanır. Satır içi biçimlendirme <g>, <x> ve <bpt> / <ept> eşleştirilmiş etiketlerini kullanır. Drupal'ın Çeviri Yönetim Aracı ve birçok eski platform hala 1.2'yi dışa aktarır.

XLIFF 2.0, 2014 revizyonu olup daha basit ve temizdir. <source> ve <target> ile birlikte <unit> ve <segment> kullanır. Satır içi işaretleme <pc> (eşleştirilmiş kod) ve <ph> (yer tutucu) kullanır. Symfony'nin çevirmen bileşeni ve modern iOS dışa aktarımları varsayılan olarak 2.0'dır.

1.2'yi işleyen bir çeviri aracı otomatik olarak 2.0'ı işleyemez. Etiket sözlükleri farklıdır ve kaçış kuralları biraz farklılık gösterir. Bir çeviri işlem hattı seçmeden önce platformunuzun hangi sürümü dışa aktardığını her zaman kontrol edin.

Bir XLIFF Biriminin Anatomisi

Minimal bir XLIFF 1.2 çeviri birimi şöyle görünür:

<trans-unit id="msg_welcome" datatype="plaintext">
  <source>Welcome, <g id="1">%name%</g>!</source>
  <target state="needs-translation">Welcome, <g id="1">%name%</g>!</target>
  <note>Displayed on the homepage after login</note>
</trans-unit>

<g id="1"> bir yer tutucu değişkeni sarmalar. state özelliği platforma bu dizenin çeviriye ihtiyacı olduğunu söyler. <note>, bir geliştirici ipucudur. XLIFF'i anlayan bir çevirmen şunu üretmelidir:

<target state="translated">¡Bienvenido, <g id="1">%name%</g>!</target>

Dosyayı düz metin olarak ele alan bir çevirmen, bu bozuk varyantlardan herhangi birini üretebilir:

<target>¡Bienvenido, <g id="1">%nombre%</g>!</target>
<target>¡Bienvenido, &lt;g id="1"&gt;%name%&lt;/g&gt;!</target>
<target>¡Bienvenido, %name%!</target>

Bunların her biri içe aktarımı farklı şekilde bozar. Birincisi değişkeni yeniden adlandırır. İkincisi XML'i kaçış karakterleriyle işler. Üçüncüsü biçimlendirme etiketini tamamen bırakır.

Kötü Çözümler (Neden Sadece XML Çeviremezsiniz)

Çoğu ekip aynı üç yaklaşımla başlar ve pes etmeden önce birkaç gün kaybeder.

XLIFF'i Genel Bir Yapay Zekaya Beslemek

Dosyayı kopyalayın, Claude veya ChatGPT'ye yapıştırın, çeviri isteyin. Model genellikle metinle makul bir iş çıkarır ancak XLIFF etiketlerine tutarsız davranır. Bazen <g> etiketlerini korur, bazen id özniteliğini çevirir, bazen tamamen kaldırır. Doğrulama başarısız olur. İçe aktarmanız XML ayrıştırma hataları verir.

XLIFF Desteksiz Bir CAT Aracı Kullanmak

Poedit gibi araçlar .po formatı için tasarlanmıştır. XLIFF'i açabilirler ancak onu genel bir metin kapsayıcısı olarak ele alırlar. Satır içi etiketler kilitlenmez. Yer tutucular korunmaz. Düzenleyicide iyi görünen ancak içe aktarıldığında şema doğrulamasını geçemeyen bir çeviri elde edersiniz.

Özel Bir Betik Yazmak

Ekibiniz, XLIFF'i xml2js ile ayrıştıran, kaynak dizeleri çıkaran, Google Translate'i çağıran ve hedef dizeleri geri yazan bir Node veya Python betiği yazar. Dizelerin %90'ı için çalışır. Diğer %10'u - iç içe biçimlendirme, çoğul gruplar veya özel karakterler içeren dizeler - siz zaten yayınladıktan sonra ortaya çıkan şekillerde bozulur.

Aynı "esnek format, naif çevirmenle buluşuyor" hata modu i18next JSON ve Gettext .po dosyalarını etkiler. React ve Next.js için i18next JSON dosyalarını çevirme kılavuzumuz ve kod değişkenlerini bozmadan .po dosyaları nasıl çevrilir hakkındaki yazımız, bu formatlar için benzer sorunları ele almaktadır.

Doğru Yol: Söz Dizimi Farkındalıklı XLIFF İşleme

Doğru bir XLIFF çeviri işlem hattı, PO motorumuzla aynı ilkeleri, XML'e uyarlanmış şekilde takip eder.

Ayrıştır, Düzenli İfade Kullanma

XLIFF'i yapılandırılmış bir belge olarak ele alın. Gerçek bir XML ayrıştırıcısıyla ayrıştırın, bir ağaç oluşturun ve <trans-unit> (veya 2.0 için <unit>) öğelerini gezin. Kaynak ve hedef içeriği düzenli ifadelerle eşleştirmeye çalışmak, bozuk dosyalara giden hızlı yoldur.

Çeviriden Önce Satır İçi Etiketleri Kilitle

Bir <source> içindeki her <g>, <x>, <bpt>, <ept>, <ph>, <pc> konum ve id özniteliği ile korunmalıdır. Metni LLM'ye göndermeden önce bunları sayısal yer tutucularla değiştirin, ardından çeviri döndükten sonra orijinal etiketleri öznitelikleriyle birlikte yeniden ekleyin.

Durum Makinesine Saygı Duyun

XLIFF birimleri durum özniteliklerine sahiptir: new, needs-translation, translated, reviewed, final, signed-off. Bir işlem hattı yalnızca new veya needs-translation durumundaki birimleri çevirmeli ve çıktı durumunu translated olarak ayarlamalıdır ( final değil - bir gözden geçiren yine de doğrulamalıdır).

Çeviri Birimlerinin Ötesindeki Yapıyı Koru

XLIFF dosyaları başlıklar, meta veriler, dosya düzeyinde öznitelikler, notlar ve alternatif çeviriler (<alt-trans>) içerir. Bunlar gidiş-dönüş sırasında değişmeden kalmalıdır. Bunları kaldırmak veya yeniden sıralamak, kaynak platformla gidiş-dönüş uyumluluğunu bozar.

Teslimattan Önce Doğrula

Çevrilmiş XLIFF'i geri döndürmeden önce şemaya göre doğrulayın. XLIFF 1.2'nin resmi bir XSD'si vardır. XLIFF 2.0'ın kendine ait bir şeması vardır. Kendini doğrulayamayan bir araç, size bozuk dosyalar gönderecek bir araçtır.

Platforma Özel Notlar

XLIFF kullanan her büyük platformun bilinmesi gereken kendine özgü özellikleri vardır.

Drupal

Drupal'ın Çeviri Yönetim Aracı (TMGMT) XLIFF 1.2'yi dışa aktarır. İçerik türleri düğümleri (sayfalar, makaleler), taksonomi terimlerini ve yapılandırmayı içerir. TMGMT, her çevrilebilir alanı Drupal'a özgü bir kimlik formatıyla (fieldname:delta:format) ayrı bir <trans-unit> içine sarar.

İpucu: Drupal, metin biçimi bilgilerini (filtrelenmiş HTML, tam HTML, düz metin) içeriğin yanında depolar. Çeviri, biçim izin verdiğinde HTML işaretlemesini korumalı, izin vermediğinde düz metne dönüştürmelidir. İşlem hattınızın alan bazında farkındalığa ihtiyacı vardır.

Symfony

Symfony'nin çeviri bileşeni varsayılan olarak XLIFF 2.0'ı kullanır (Symfony 4'ten beri). Dizeler translations/messages.xx.xliff içinde bulunur. Symfony, XLIFF içinde ICU mesaj formatını destekler, bu da tek bir birimin {count, plural, one {...} other {...}} yapılarını içerebileceği anlamına gelir.

İpucu: XLIFF içindeki ICU çoğul kategorileri çifte korumaya ihtiyaç duyar. XML etiketleri sağlam kalmalı VE ICU anahtar kelimeleri (plural, one, other, =0) çevrilmemelidir. Birçok XLIFF aracı bir katmanı işler ancak her ikisini birden değil.

Angular i18n

Angular, ng extract-i18n komutu aracılığıyla XLIFF 1.2 veya 2.0'ı dışa aktarır. Dosyalar, Angular ifadelerini ve {{ count }} gibi interpolasyonları temsil eden <x> etiketleriyle bileşen şablon dizeleri içerir.

İpucu: Angular, aynı kaynak dizeler arasında id hash çakışmaları kullanır. Bir çeviri, birim Kimliklerini (ID) tam olarak korumalıdır, aksi takdirde Angular içe aktarımda eşleştiremez. İşleme sırasında id özniteliklerini yeniden adlandırmak anında bir bozulmaya yol açar.

iOS (Xcode Dışa Aktarımı)

Xcode, uygulama yerelleştirmesi için Product > Export Localizations aracılığıyla XLIFF 1.2'yi dışa aktarır. Dizeler Localizable.strings, Info.plist girişleri, storyboard'lar ve XIB'lerden gelir. iOS çoğul kuralları, ek çeviri birimleri olarak dışa aktarılan .stringsdict dosyalarında bulunur.

İpucu: iOS storyboard dizeleri kullanıcı arayüzü öğesi Kimliklerine (ID) referans verir. Bunlar değiştirilmemelidir. Ayrıca, Xcode, target-language özniteliğinin beklenen yerel ayar formatıyla (bazı bağlamlarda es-ES değil, es) tam olarak eşleşmesini gerektirir, aksi takdirde içe aktarmayı sessizce yoksayar.

SimplePoTranslate ile XLIFF Çevirisi

SimplePoTranslate, Pro ve Lifetime planlarında XLIFF'i destekler. İş akışı, .po dosyalarıyla aynıdır.

1. XLIFF'inizi Dışa Aktarın

Kaynak platformunuzdan bir veya daha fazla .xliff dosyası dışa aktarın. Drupal için TMGMT'nin dışa aktarma eylemini kullanın. Symfony için translations/messages.en.xliff dosyasını bulun. Angular için ng extract-i18n --format=xlf2 komutunu çalıştırın. Xcode için Yerelleştirme dışa aktarmasını kullanın.

2. SimplePoTranslate'e Yükleyin

Dosyayı panoya sürükleyin. Platform, XLIFF sürümünü (1.2 veya 2.0) otomatik olarak algılar, yapıyı ayrıştırır ve çevrilebilir birimleri tanımlar. Hedef dilinizi ve tonunuzu seçin.

3. Söz Dizimi Farkındalıklı Çeviri

Satır içi etiketler, ICU parametreleri, yer tutucular ve birim Kimlikleri (ID) çeviriden önce kilitlenir. Altta yatan yapay zeka motoru yalnızca bağlamla birlikte temiz metin görür. Çevrilen metin, tam orijinal yapısına yeniden eklenir, durumlar güncellenir ve dosya teslimattan önce XLIFF şemasına göre doğrulanır.

4. İndirin ve İçe Aktarın

Çevrilmiş XLIFF'i (artı platformlar arası ihtiyacınız varsa .po, .json ve .php karşılıklarını) indirin. Kaynak platformunuza aktarın. Yayınlamadan önce birkaç çevrilmiş sayfayı veya görünümü oluşturarak doğrulayın.

# Angular example
ng extract-i18n --format=xlf2 --output-path=src/locale
# upload src/locale/messages.xlf to SimplePoTranslate
# download messages.es.xlf
# reference in angular.json i18n configuration
ng build --localize

5. CI'ya Entegre Edin

İşlem hattına güvendiğinizde, onu otomatikleştirin. Her sürümde XLIFF'i dışa aktarın, API aracılığıyla gönderin, çevrilmiş dosyaları indirin, depoya commit edin, dağıtın. Bu, birçok ajansın WordPress .po çevirisi için kullandığı CI dostu bir desendir - mimari desen için bozuk siteler olmadan bulut tabanlı çeviri hakkındaki yazımıza bakın.

Hepsini Bir Araya Getirmek

XLIFF, ciddi yerelleştirme çalışmaları için doğru araçtır – yapılandırılmış, araçtan bağımsız ve proje meta verilerini sistemler arasında taşıyabilecek kadar zengindir. Ancak XML yapısı aynı zamanda kırılgandır. Her etiket, öznitelik ve durum değeri semantik ağırlığa sahiptir ve XLIFF'i bir format olarak anlamayan bir çevirmen, dosyanızı içe aktarma başarısız olana veya bir kullanıcı bozuk kullanıcı arayüzü bildirene kadar yüzeye çıkmayabilecek şekillerde bozacaktır.

Güvenli yaklaşım söz dizimi farkındalığıdır: XML'i ayrıştırın, yapısal öğeleri kilitleyin, yalnızca bağlamla birlikte metin yüzeylerini çevirin, teslimattan önce şemaya göre doğrulayın. Bu, bir Drupal sitesi, bir Symfony API'si, bir Angular SPA'sı veya bir iOS uygulaması gönderiyor olsanız da geçerlidir. Platform farklılık gösterir, ancak XLIFF disiplini farklılık göstermez.

Drupal, Symfony, Angular veya iOS için XLIFF dosyalarını bozuk etiketler olmadan çevirmeye hazır mısınız? SimplePoTranslate'i ücretsiz deneyin - kredi kartı gerekmez. .xliff yükleyin, güvenli çevirileri indirin, platformunuza aktarın.