İçeriğe geç

WPML

WPML, özel bir bloğun özniteliklerini yalnızca dil yapılandırma dosyasında tanımlandıkları ölçüde çevirir. Blockstudio, her alan değerini blok yorumunda blockstudio.attributes altında saklar; bu nedenle her blok için, WPML metin alanlarına ve ek kimliklerine yönlendiren bir girdi gerekir. wp bs wpml config komutu, kayıtlı her blok için bu girdileri yazar.

Blokların neden bir yapılandırmaya ihtiyacı var

WPML, yapılandırmayı etkin temanın ve etkin her eklentinin kök klasöründeki wpml-config.xml adlı dosyadan okur. Tek bir dosyadan oluşan bir zorunlu eklentide klasörün adı, .php olmadan dosyanın adıdır. Dil Yapılandırma Dosyaları ve Özel Gutenberg Bloklarını Çevirilebilir Hale Getirme bölümlerine bakın.

Bir girişi olmayan blok, WPML tarafından otomatik dize algılamasına bırakılır; bu yöntem, bloktaki her dize niteliğini çeviri için sunar. Seçim değerleri, dosya başvuruları, URL’ler ve CSS sınıfları içeren bir Blockstudio bloğunda çevirmenler bu teknik değerleri gerçek metnin yanında görür; çevrilmiş bir seçim değeri veya sınıf bloğu bozabilir.

Yapılandırmayı oluşturma

Yapılandırmayı yazdırın ve blokları içeren tema veya eklentinin kök klasörüne kaydedin:

Kabuk
wp bs wpml config > wp-content/themes/my-theme/wpml-config.xml

Ya da dosyayı komutun yazmasını sağlayın:

Kabuk
wp bs wpml config --file=wp-content/themes/my-theme/wpml-config.xml

Bir metin alanı, görsel, bağlantı ve tekrarlayıcı içeren blok:

JSON
{
  "name": "my-theme/cards",
  "title": "Cards",
  "blockstudio": {
    "attributes": [
      { "id": "heading", "type": "text", "label": "Heading" },
      { "id": "gallery", "type": "files", "label": "Gallery", "multiple": true },
      {
        "id": "style",
        "type": "select",
        "label": "Style",
        "options": [
          { "value": "light", "label": "Light" },
          { "value": "dark", "label": "Dark" }
        ]
      },
      {
        "id": "cards",
        "type": "repeater",
        "label": "Cards",
        "attributes": [
          { "id": "title", "type": "text", "label": "Title" },
          { "id": "image", "type": "files", "label": "Image" },
          { "id": "link", "type": "link", "label": "Button" }
        ]
      }
    ]
  }
}

şuna dönüşür:

XML
<wpml-config>
	<gutenberg-blocks>
		<!-- blockstudio:start -->
		<!-- Generated by wp bs wpml config. Run it again after changing block fields; edits between the markers are replaced. -->
		<gutenberg-block type="my-theme/cards" translate="1" label="Cards">
			<key name="blockstudio">
				<key name="attributes">
					<key name="heading" label="Heading" />
					<key name="gallery">
						<key name="*" type="post-ids" sub-type="attachment" />
					</key>
					<key name="cards">
						<key name="*">
							<key name="title" label="Cards: Title" />
							<key name="image" type="post-ids" sub-type="attachment" />
							<key name="link">
								<key name="title" label="Cards: Button: Link text" />
								<key name="url" type="link" label="Cards: Button: URL" />
							</key>
						</key>
					</key>
				</key>
			</key>
		</gutenberg-block>
		<!-- blockstudio:end -->
	</gutenberg-blocks>
</wpml-config>

style değeri bildirilmediğinden WPML bu değeri değiştirmeden kopyalar. gallery ve image kimlikleri de kopyalanır; blok oluşturulurken WPML bunların her birini sayfa dilindeki ekleyle değiştirir, böylece çevrilmiş bir görselin kendi alternatif metni olabilir. Özel Gutenberg Bloklarını Çevirilebilir Hale Getirme bölümündeki “Bloklardaki Kimlikleri Otomatik Dönüştürme” başlığına bakın. Eklemin çevirisi yoksa WPML özgün kimliği korur.

Bildirilenler

Komut, kayıtlı blokları; custom/ alanları ve blok alanları genişletildikten, geçersiz kılmalar ve nitelik filtreleri uygulandıktan sonra okur. uzantılar tarafından bir Blockstudio bloğa eklenen alanlar dahil edilir. Uzantıların çekirdek bloklara veya diğer eklentilerin bloklarına eklediği alanlar dahil edilmez; çünkü bu bloklar yapılandırmalarını WPML dosyasından veya kendi eklentilerinden alır.

Alan Bildirim
text, textarea, richtext, wysiwyg Çevrilebilir metin.
link Metin olarak title ve type="link" ile url; böylece WPML, kullanılabilir olduğunda bir bağlantıyı çevirisiyle değiştirir.
files type="post-ids" ve sub-type="attachment" ile saklanan eklem kimliği. multiple ile liste için * adlı bir düzey; bu, tek dosya seçildiğinde alanın sakladığı tek kimlikle de eşleşir.
repeater Her satırla eşleşen * adlı bir düzey ve satır alanlarının bildirimleri. İç içe tekrarlayıcılar da aynı şekilde çalışır.
id içeren group Grubun alanları; grup kimliği anahtar öneki olarak kullanılır (gruptaki cta grubunun text alanı için cta_text).
id olmadan group, tabs Kendi düzeyleri olmayan alanlar.
true olarak ayarlanmış translate ile kaydedilen özel alan türü text alanı gibi çevrilebilir metin.
Diğer tüm yerleşik türler Bildirilmez. WPML değeri değiştirmeden kopyalar.

Bildirilen bir metin alanı olmayan bloğa translate="0" uygulanır. Ardından WPML tüm değerlerini kopyalar ve bu bloktaki hiçbir şeyi çeviriye sunmaz. files alanları yine de girişte bildirilir; çünkü WPML, eklem kimliklerini translate ne derse desin dönüştürür. İç bloklar her zamanki gibi çevrilir.

Bildirilmeyenler:

  • Değerleri editörler tarafından yazılmadığı için hidden içeren alanlar.
  • Aşağıya bakın: "translate": false içeren alanlar.
  • translate, true olarak ayarlanarak kaydedilmemiş özel alan türlerinin alanları. Değerinin metin içerip içermediğini yalnızca alan türü bildiğinden komut her biri için bir uyarı yazdırır. Bir alandaki açık "translate": false da o alan için bu uyarıyı bastırır. Aşağıya bakın.
  • Blockstudio alanları olarak değil, blokların yerel attributes dosyasında bildirilen nitelikler.
  • Alanları farklı türlerde olan depolama anahtarları; aşağıya bakın.

"translate": false ayarlanmamışsa CSS sınıfı gibi teknik bir değer tutan alanlar dahil her metin alanı bildirilir.

Alanı dahil etmeme

Bir metin alanı, her dilde aynı kalması gereken bir değer tutabilir: hesap adı, e-posta adresi, bağlantı noktası veya CSS sınıfı. WPML bu değeri diğer metinler gibi çeviriye sunar; çevrilmiş bir değer bloğu bozabilir. Alanı yapılandırmaya dahil etmemek için translate değerini false olarak ayarlayın; böylece WPML değerini çeviriye değiştirmeden kopyalar:

JSON
{
  "id": "account",
  "type": "text",
  "label": "Account handle",
  "translate": false
}

Bir group, tabs veya repeater üzerinde "translate": false, iç içe kapsayıcılar dahil içindeki her alana uygulanır. Bir alt öğe, kapsam dışı bırakılmış bir kapsayıcıyı "translate": true ile geçersiz kılamaz. Bir files alanında false eklem kimliklerini de dışarıda bırakır; böylece çeviri özgün ekleri korur.

translate değerini atlamak veya true olarak ayarlamak mevcut davranışı korur: kararı alan türü verir. Bu, gizli alanları veya select gibi değer türlerini çevrilebilir hale getirmez. Seçenek, blok ve uzantı alanlarına uygulanır; düzenleyici denetimlerini gizlemez ya da devre dışı bırakmaz ve saklanan değerlerini değiştirmez. Ayarı değiştirdikten sonra wp bs wpml config komutunu yeniden çalıştırın ve oluşturulan yapılandırmayla wpml-config.xml dosyanızı güncelleyin.

Her anahtarın label, alan etiketidir; öncesinde kimliği olan kapsayıcı tekrarlayıcıların ve grupların etiketleri yer alır. WPML bunu çeviri düzenleyicisinde alan adı olarak gösterir. Bir link alanının iki anahtarı, etikete Link text ve URL ekler. Bu son ekler site diline çevrilir; bu nedenle komutu çevirmenlerinizin çalıştığı yerel ayarla çalıştırın.

Özel alan türleri

Düz bir metin dizesi saklayan alan türü, kaydedilirken bunu belirtir. Tanımda translate değerini true olarak ayarlayın; bunun için attribute değerinin string olması gerekir:

PHP
bs_register_field_type('acme/headline', [
  'attribute' => 'string',
  'translate' => true,
]);

Komut daha sonra bu türün her alanını çevrilebilir metin olarak tanımlar. Bir alan, kendisini hariç tutmak için yine de "translate": false ayarını yapabilir. Bu seçenek olmadan, türün alanları önceki gibi hariç tutulur ve raporlanır.

Etiketleri değiştirme

Alan etiketleri blok düzenleyici için yazılır ve çeviri düzenleyicisinde anlam taşımayan “Görsel (isteğe bağlı)” gibi ipuçları içerebilir. blockstudio/wpml/config/label filtresi, anahtarın bağlamıyla birlikte her etiketi yazılmadan önce alır:

  • block: blok adı.
  • path: blockstudio.attributes altındaki alanın depolama yolu; her yineleyicinin satırları için * düzeyinde, örneğin cards/*/link.
  • field: alan tanımı.
  • parents: kapsayan, kimlikli yineleyicilerin ve grupların etiketleri.
  • part: metin alanı için text, bağlantı alanının iki anahtarı için title veya url.
PHP
add_filter('blockstudio/wpml/config/label', function ($label, $context) {
  return str_replace(' (optional)', '', $label);
}, 10, 2);

Bir anahtarın etiketini hariç tutmak için boş bir dize döndürün; böylece WPML bunun yerine bloğun etiketini gösterir. Dize olmayan bir dönüş değeri özgün etiketi korur. Filtreyi değiştirdikten sonra komutu yeniden çalıştırın.

Aynı depolama anahtarına sahip alanlar

Örneğin bir blok alanı ile aynı id değerine sahip bir uzantı alanı veya cta kimlikli bir gruptaki text alanı ile cta_text kimlikli bir alan gibi, iki alan aynı depolama anahtarına sahip olabilir. Komut, bu anahtarda ne depolandığı açık olduğunda anahtarı tanımlar:

  • Bir bloğun yineleyici satırlarının dışındaki alanlarında Blockstudio, depolama anahtarı başına bir öznitelik kaydeder; dolayısıyla türü ne olursa olsun sonraki alan öncekini değiştirir. Bir bloğun uzantı alanları da aynı şekilde çalışır: sonraki alan veya daha sonra kaydedilen bir uzantının alanı öncekinin yerine geçer.
  • Aynı anahtara sahip bir blok alanı ve uzantı alanı birlikte etkin kalır. Blok şablonu değeri bloğun alanında tanımlandığı biçimde alırken uzantı kendi alanıyla uygulanır. Her iki alan da aynı tanımı gerektirdiğinde anahtar bir kez tanımlanır: ikisi de metin alanıdır (text, textarea, richtext veya wysiwyg), ikisi de bağlantı alanıdır, ikisi de files alanıdır (ikisinden birinde multiple varsa anahtar * düzeyini alır) ya da biri select, diğeri number gibi hiçbiri tanımlanmamıştır. İki yineleyici, satırlarındaki alanlar tek tek karşılaştırılarak değerlendirilir. Etiket blok alanından alınır.
  • Tek bir yineleyicinin satırlarında aynı id değerine sahip iki alan da birlikte etkin kalır ve aynı şekilde karşılaştırılır.

Türler farklı olduğunda, örneğin blokta bir text alanı ve uzantıda bir select alanı varsa, depolanan değer, yazan denetime bağlı olarak metin veya bir seçeneğidir. Komut anahtarı tanımlamaz ve bir uyarı yazdırır:

Kabuk
Warning: Not declared, the fields that store this key have different types: my-theme/cards: tone (text in the block, select in an extension)

Anahtarın tanımlanması için alanlardan birini yeniden adlandırın veya ikisine de aynı türü verin.

Yapılandırmayı güncel tutma

Alan ekledikten, kaldırdıktan veya yeniden adlandırdıktan sonra komutu yeniden çalıştırın ve güncellenmiş dosyayı temayla ya da eklentiyle birlikte dağıtın. Ek iliştirme kimliği tanımlarını içermesi için 7.7.5 öncesinde oluşturulmuş yapılandırmaları yeniden oluşturun. Daha önce var olan içerikte yeni alanların çeviri için görünmesi için, yukarıdaki WPML kılavuzunda açıklandığı gibi özgün içeriği güncelleyin.

--file ile komut eksik bir dosya oluşturur. Mevcut bir dosyada yalnızca <!-- blockstudio:start --> ile <!-- blockstudio:end --> arasındaki metni değiştirir; böylece diğer bölümler ve başka bloklara ait girdiler olduğu gibi kalır:

XML
<wpml-config>
	<custom-types>
		<custom-type translate="1">book</custom-type>
	</custom-types>
	<gutenberg-blocks>
		<gutenberg-block type="my-plugin/map" translate="1">
			<key name="caption" />
		</gutenberg-block>
		<!-- blockstudio:start -->
		<!-- blockstudio:end -->
	</gutenberg-blocks>
</wpml-config>

Henüz işaretleyicileri olmayan mevcut bir dosyayı kullanmak için, iki işaretleyici satırını dosyanın gutenberg-blocks öğesinin içine bir kez ekleyin veya dosyada böyle bir öğe yoksa işaretleyicileri içeren bir gutenberg-blocks öğesi ekleyin. İşaretleyiciler yoksa veya sonuç geçerli bir yapılandırma olmayacaksa komut dosyayı değiştirmeden bırakır ve hatayla çıkar.

Blockstudio blokları için elle yazılmış, örneğin teknik değerleri gizleyen translate="0" girdileri gibi girdilere, oluşturulan bölüm bloğu kapsadığında artık gerek kalmaz. Komut birden fazla kez tanımlanan her blok için uyarı verir; böylece bu girdiler kaldırılabilir.

Çeviri işlerinde görsel metinleri

WPML, bir sayfanın kullandığı görsellerin başlık, alternatif metin, altyazı ve açıklama gibi metinlerini sayfanın çeviri işine ekler. İş tamamlandığında WPML çevrilmiş metinleri hedef dildeki ek dosyaya yazar ve henüz yoksa bu eki oluşturur. Bkz. Medyayı çevirme. WPML görselleri içerikteki <img> etiketlerinde, galerilerde, öne çıkarılan görselde ve bildiği bloklarda bulur. Bir Blockstudio bloğu ek dosya kimliklerini blok yorumunda depolar; bu nedenle WPML bunlardan hiçbirini bulamaz.

WPML etkin olduğunda, Blockstudio bir sayfanın bloklarındaki alanların depoladığı ek dosyaları bulunan görsellerin WPML listesine ekler:

  • Gizli olanlar dâhil files alanları ve media içeren attributes alanları; blok düzenleyicinin medya olarak yüklediği alanlarla aynıdır.
  • Gruplardaki, sekmelerdeki, yineleyici satırlarındaki ve iç bloklardaki alanlar.
  • uzantılarının alanları; değerleri genişletilen bloğun özniteliklerinde depolandığından çekirdek bloklarda ve diğer eklentilerin bloklarında da geçerlidir.

Ek dosya kimliği olmayan değerler hariç tutulur. Herhangi bir yapılandırma gerekmez ve wpml-config.xml devreye girmez. WPML olmadan çeviri işleri için hiçbir şey taranmaz ve medya entegrasyonu sınıfı yüklenmez.

Bu, ek dosya kimliği dönüştürme işleminden ayrıdır: oluşturulan XML, WPML bileşenine hangi çevrilmiş ek dosyanın görüntüleneceğini söylerken bu entegrasyon, çeviri işine hangi ek dosya metinlerinin ekleneceğini bildirir. Dize başvuruları ve ek dosya olmayan yazıların kimlikleri medya işlerine eklenmez. Kaydedilmiş iç içe alan değerleri, oluşturma sırasında olduğu gibi, Blockstudio bloklarındaki üst düzey değerlerden önceliklidir.

Görsel metin seçeneklerinden biri WPML > Ayarlar > Medya Çevirisi altında etkinleştirildiğinde metinler işe eklenir: “Görsel metinlerini çevirmek için en iyi seçenekleri otomatik olarak algıla” veya “İçeriği çevirirken Medya Kitaplığı metinlerini çevir”. Çekirdek bloklardaki görseller için de durum aynıdır.

Blockstudio, gönderinin PostWithMediaFiles içindeki medyaya uygulanan WPML filtresi aracılığıyla görselleri bildirirwpml_ids_of_media_used_in_post. Bir görseli işlemlerin dışında bırakmak için aynı filtrede 10’dan yüksek önceliğe sahip bir geri çağırımda görselin kimliğini kaldırın:

PHP
add_filter(
	'wpml_ids_of_media_used_in_post',
	function ( $ids ) {
		return array_values( array_diff( $ids, array( 42 ) ) );
	},
	20
);