WordPress'te köprü metni çevrilebilir bir metin nasıl yapılır?


15

Köprü çevirisi yapılabilir bir metin oluşturmanın farklı yollarını gördüm. Ancak, en iyi tek bir uygulamayı bulamadım.

İşte bulduğum çözümlerden bazıları:

// METHOD 1
sprintf( __( 'Please read %1$sthis%2$s.', 'tacoverdo-example-domain' ), '<a target="_blank" href="' . esc_url( 'https://goo.gl' ) . '">', '</a>' );

// METHOD 2
echo '<a target="_blank" href="' . esc_url( 'https://goo.gl' ) . '">';
_e( 'Please read this.', 'tacoverdo-example-domain' );
echo '</a>';

// METHOD 3
sprintf( __( 'Please read <a href="%s">this</a>.', 'tacoverdo-example-domain' ), esc_url( 'https://goo.gl' ) );

// METHOD 4
sprintf( __( 'Please read %sthis%s.', 'tacoverdo-example-domain' ), '<a target="_blank" href="' . esc_url( 'https://goo.gl' ) . '">', '</a>' );

// METHOD 5
_e( 'Please read <a target="_blank" href="' . esc_url( 'https://goo.gl' ) . '">this</a>', 'tacoverdo-example-domain' );

İlk düşüncem, yöntem 1'in en iyi olacağını düşündüm. Çevirmenlerinizin HTML bilmelerini gerektirmez. Ama aynı zamanda onunla uğraşmasına izin vermez. Ayrıca, HTML bölümünün tamamını tekrar tekrar çevirmeniz gerekmediğinden oldukça KURU (Kendini Tekrar Etmeyin).

Ancak, bu soruyu twitter'a gönderirken, insanlar yöntem 3'ün burada görebileceğiniz gibi en iyi olacağını söyledi .

Peki, WordPress'te köprü metni çevrilebilir bir metni nasıl yapabilirim?

Yanıtlar:


17

Bu çok yönlü bir konudur. Doğal HTML içerik sorunlarını, dizeleri tarama, çeviri işleminin kendisi ve doğrulaması gibi tüm yeni çeviri zorluklarıyla birleştirir.

Yani şunu birleştirmeliyiz:

  1. Metin (çevrilebilir biçimde)
  2. HTML işaretlemesi (kırılması zor ancak tercihen esnek biçimde)
  3. URL hedefi (güvenli ve tercihen çevrilebilir biçimde, dile özgü olabilir!)

Ayrıca aşinalık ve önceki sanatı, yani çekirdek ne yapmayı düşünmeliyiz. Tamam, hızlı kontrolle çekirdeğin bunu bu yolların çoğunda (hepsi değilse de) yapmasına yardımcı olmaz.

Bu faktörler ve etraftaki tartışmalardan , ihtiyaçlara ve önceliklere bağlı olarak üç grup yaklaşım olduğunu söyleyebilirim.

Basit - her şeyi içeren bir dize

__( 'Please read <a href="https://goo.gl">this</a>', 'example-domain' );
  • kodu takip etmek kolay
  • tüm bölümleri (metin, biçimlendirme, URL) bir bütün olarak çevirmeye izin verir
  • URL sabit kodlanmış
  • HTML sonlarına eğilimli
  • çekirdeğinde popüler

Dengeli - URL bozuldu

sprintf( 
    __( 'Please read <a href="%s">this</a>', 'example-domain' ), 
    esc_url( 'https://goo.gl' ) 
);
  • takip etmesi kolay
  • tüm bölümleri çevirebilir, ancak URL'ler ayrı bir çeviri çağrısına ihtiyaç duyar
  • URL dinamik olabilir ve kaçabilir
  • HTML sonlarına eğilimli
  • çekirdeğinde popüler
  • geliştiriciler / çevirmenler arasında anekdot olarak popüler

Parça parça - işaretleme koptu

sprintf( 
    __( 'Please read %1$sthis%2$s.', 'example-domain' ), 
    '<a href="' . esc_url( 'https://goo.gl' ) . '">',
    '</a>' 
);

veya birleştirme yoluyla

'<a href="' . esc_url( 'https://goo.gl' ) . '">' 
. __( 'Please read this.', 'example-domain' );
. '</a>';
  • daha az okunabilir
  • HTML kopuşlarına karşı daha dayanıklı
  • çekirdekte daha az popüler
  • çeviri için daha fazla içeriğe ihtiyaç var

Başparmak kuralı (gördüğüm kadarıyla)

  1. Basit mümkün olduğunca basit olarak tutmak için
  2. HTML kırılmalarını önlemek için parça parça
  3. diğer tüm durumlar için dengeli (en yaygın olanı)

+1. Ben "Dengeli" seçeneği gibi, belki _xyerine kullanarak bağlam ekleyerek geliştirilebilir__
gmazzap

Parçacıkları, kapsamlı olanlardan ziyade temel örnekler olarak amaçladım. Muhtemelen her birinde çok sayıda senaryo ve çeviri işlevi nedeniyle farklılıklar olacaktır.
Rarst

Dengeli seçeneğin de sorunu var, çevirmenler yanlış işaretleme oluşturabilir. Emin ve güvenli bir çeviri için html'yi hariç tutmak daha iyidir. Ayrıca bağlamla çeviri işlevleri için oy kullanıyorum. Bu, çevirmenlere konum, eklenti bağlamı, tema hakkında bilgi sahibi olmadan nasıl olduğunu anlama şansı verir.
bueltge

Daha önce 'çevirmenlerin bağlama ihtiyacı var' argümanını duymuştum, ama bu beni meraklandırıyor. Bu örnekte bağlam için neye ihtiyaçları var ? Sanırım ihtiyaç duyulduğunda bağlam sağlamak iyi bir uygulamadır, ancak çevirmenlerin bu durumda buna gerçekten ihtiyacı var mı? Onlar olmadığını bilmek gerekiyor mu %saçılımı <strong>veya <a href target="#">? Çevirilerini etkiler mi?
Taco Verdo

@TacoVerdo bağlantı koparsa, metni çok iyi belirsiz olmadan varsayabilirim, bu durumda bağlam metnin hangi hedef için olduğunu söylemelidir . Bağlam, bilgileri tam ve açık olana kadar doldurmaya yarar. Metni daha küçük bağımsız parçalara böldüğünüzde, her birinin bütüne sığdığı yer için daha fazla içeriğe ihtiyacı vardır.
Rarst

8

Bugünlerde çok dilli web siteleriyle çalışıyorum ve şunu söylemeliyim:

  1. Bağlantıların URL'lerinin genellikle çevrilebilir olması gerekir.
  2. Güven çeviri işlevi çıktısı kötü. Hemen hemen hiç kullanmıyorum __()hep ama esc_html__()/ esc_attr__(). Başka bir deyişle, çevrilecek dize hiçbir türde HTML içeremez.
  3. İngilizce yazarken, diğer dillerde bir sözcüğün bağlama bağlı olarak farklı şekillerde yazılabileceğini pek fark etmiyoruz. Dolayısıyla metin 1 veya birkaç kelime içerdiğinde *_x(), çeviri işlevlerinin varyantını kullanmak her zaman daha iyidir .
  4. her çevrilebilir dize için birden fazla yer tutucunun dahil edilmesi "tehlikeli" olabilir. Çevirmen bir geliştirici değilse, sayfa oluşturmayı kolayca kıracaktır. Örnekte %1$sthis%2$steknik olmayan bir çevirmen, doğru renderleme için shemen öncesinin thisgerekli olduğunu anlamaz ve ayrıca geliştiricinin yazmak istediğini, thisancak yazım hatası yaptığını ve yazdığını düşünebilir sthis.

Tüm bu nedenlerden ötürü, bağlantılar içeren metni "düzgün" tercüme etmek zordur. Yukarıda belirtilenlerin tümünü dikkate alan tek geçerli çözüm:

$anchor = esc_html_x( 'Google', 'link text for google.com', 'txt-domain' );
$domain = esc_url( __( 'google.com', 'txt-domain' ) );  
$link   = sprintf( '<a href="https://%s">%s</a>', $domain, $anchor );

 /* translators: 1 is a link with text "Google" and URL google.com */
echo sprintf( esc_html__( 'Use %1$s to search.', 'example-domain' ), $link );

Teknik olmayan insanlar tarafından tercüme edilmesi güvenli ve kolaydır, aynı zamanda özellikle birkaç bağlantı için yapılması gerekiyorsa, ayrıntılı ve uygulanacak bir PITA ...

Bununla birlikte, birçok dilde konuşan binlerce (gerçek veya potansiyel) kullanıcıyla vahşi ortamda yayınlanan bir kod için, bu şekilde alırdım.

Aslında sadece dahili kullanım kodu için bile bu şekilde alıyorum, ama bu benim.


Not :

"Google" kelimesinin ayrı ayrı çevrilebilir hale getirilmesi çok fazla görünebilir ve muhtemelen bu özel durum için doğrudur. Ancak bazen marka adlarının yanlış olduğunu bile varsayalım. Sadece bir örnek vermek gerekirse, İtalya'da dünya çapında ~ 30 farklı isimle bilinen "Algida" markasına sahibiz .

Bu durumda, URL'nin ve / veya marka adının kodlanması sorunlara neden olur.

Çeviri için bağlam sağlamak, çevirmenlerin marka adını çevirmeleri gerekip gerekmediğine karar vermelerine yardımcı olacaktır.


2

İşaretlemeyi çevrilebilir dize içinde tutmalısınız, çünkü çevirmenler bir bağlantı olduğunu bilmelidir . Bazı dillerde, sonuçta elde edilen bağlantı metni birden çok kelimeye yayılabilir, içinde virgül (veya eşdeğeri) veya doğru şekilde iç içe yerleştirilmesi gereken başka bir işaretleme bile olabilir.

Bu veya burada değil, konuşan bir bağlantı metni oluşturmak da önemlidir .

2 veya 3 yalnızca çevrilebilir seçeneklerdir, ancak URL'yi de çevrilebilir hale getirmelisiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.