Ugrás a tartalomhoz

WPML

A WPML csak addig fordítja le egyéni blokkok attribútumait, ameddig a nyelvi konfigurációs fájl deklarálja őket. A Blockstudio minden mezőértéket a blokk megjegyzésében tárol a blockstudio.attributes alatt, ezért minden blokkhoz olyan bejegyzés szükséges, amely a WPML elemet a szövegmezőire és a mellékletek azonosítóira irányítja. A wp bs wpml config parancs minden regisztrált blokkhoz létrehozza ezeket a bejegyzéseket.

Miért van szükségük konfigurációra a blokkoknak

A WPML az aktív sablon gyökérmappájában és minden aktív bővítmény gyökérmappájában található, wpml-config.xml nevű fájlból olvassa be a konfigurációt. Egyetlen fájlból álló kötelezően használandó bővítmény esetén a mappa neve a fájl neve, .php nélkül. Lásd: Nyelvi konfigurációs fájlok és Egyéni Gutenberg blokkok fordíthatóvá tétele.

A bejegyzés nélküli blokk fordíthatóságáról a WPML automatikus szövegfelismerése gondoskodik, amely a blokk minden szöveges attribútumát felkínálja fordításra. Egy Blockstudio blokk esetében ide tartoznak a választási értékek, fájlhivatkozások, URL-ek és CSS osztályok. A fordítók ezeket a technikai értékeket a valódi szöveg mellett látják, és egy lefordított választási érték vagy osztály működésképtelenné teheti a blokkot.

A konfiguráció létrehozása

Írassa ki a konfigurációt, és mentse annak a sablonnak vagy bővítménynek a gyökérmappájába, amely a blokkokat tartalmazza:

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

Vagy hagyja, hogy a parancs írja meg a fájlt:

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

Egy blokk szövegmezővel, képpel, hivatkozással és ismétlőmezővel:

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" }
        ]
      }
    ]
  }
}

eredménye:

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>

A style érték nincs deklarálva, ezért a WPML változatlanul másolja át a fordításba. A gallery és image azonosítók is átkerülnek, a WPML pedig a blokk megjelenítésekor mindegyiket az oldal nyelvéhez tartozó melléklettel helyettesíti, így a lefordított képhez saját alternatív szöveg tartozhat. Lásd az „Azonosítók automatikus átalakítása blokkokban” című részt itt: Egyéni Gutenberg blokkok fordíthatóvá tétele. Ha egy mellékletnek nincs fordítása, a WPML megtartja az eredeti azonosítót.

Mit deklarál a konfiguráció

A parancs a regisztrált blokkokat olvassa be, miután a custom/ mezők és blokkmezők kibontása, valamint a felülírások és attribútumszűrők alkalmazása megtörtént. A bővítmények által egy Blockstudio blokkhoz hozzáadott mezők is bekerülnek. A bővítmények által az alapblokkokhoz vagy más bővítmények blokkjaihoz hozzáadott mezők nem kerülnek bele, mert ezek a blokkok a konfigurációjukat a WPML fájlból vagy a saját bővítményükből kapják.

Mező Deklaráció
text, textarea, richtext, wysiwyg Fordítható szöveg.
link title szövegként, url pedig type="link" értékkel, így a WPML elérhető fordítás esetén a hivatkozást annak fordítására cseréli.
files A tárolt mellékletazonosító type="post-ids" és sub-type="attachment" értékkel. multiple esetén a lista szintje * nevű, ami az egyetlen fájl kiválasztásakor tárolt azonosítóra is illeszkedik.
repeater A szint neve *, és minden sorra illeszkedik; a deklarációk a sor mezőire vonatkoznak. A beágyazott ismétlőmezők ugyanígy működnek.
group id értékkel A csoport mezői, a csoportazonosítóval mint kulcselőtaggal (cta_text a cta csoport text mezőjéhez).
group id nélkül, tabs A mezők saját szint nélkül.
translate értéke true, regisztrált egyéni mezőtípus Fordítható szöveg, például egy text mező.
Minden más beépített típus Nincs deklarálva. A WPML változatlanul másolja át az értéket.

A deklarált szövegmező nélküli blokk translate="0" értéket kap. Ezután a WPML átmásolja az összes értékét, és semmit sem kínál fel fordításra. A files mezői ettől még deklarálva vannak a bejegyzésben, mert a WPML a mellékletazonosítókat attól függetlenül átalakítja, hogy mit mond a translate. A belső blokkok fordítása a szokásos módon történik.

Nincs deklarálva:

  • A hidden-vel rendelkező mezők, mert értékeiket nem a szerkesztők írják.
  • A "translate": false-vel rendelkező mezők, lásd alább.
  • Egyéni mezőtípusok mezői, amelyek nincsenek regisztrálva a translate-ben true értékkel. A parancs mindegyikhez figyelmeztetést ír ki, mert csak a mezőtípus ismeri, hogy az értéke tartalmaz-e szöveget. Egy mezőn megadott explicit "translate": false az adott mezőnél is elnyomja ezt a figyelmeztetést. Lásd alább.
  • Azok az attribútumok, amelyeket egy blokk a natív attributes formátumában deklarál, nem pedig Blockstudio mezőkként.
  • Azok a tárolókulcsok, amelyek mezői különböző típusúak; lásd alább.

Minden szövegmező deklarálva van, beleértve az olyan technikai értéket tartalmazókat is, mint egy CSS osztály, kivéve, ha be van állítva rajta a "translate": false.

Mező kihagyása

Egy szövegmező olyan értéket is tartalmazhat, amelynek minden nyelven azonosnak kell maradnia: fióknevet, e-mail-címet, horgonyt vagy CSS osztályt. A WPML ezt bármely más szöveghez hasonlóan felkínálja fordításra, a lefordított érték pedig működésképtelenné teheti a blokkot. Állítsa a translate értékét false értékre, hogy a mező kimaradjon a konfigurációból, és a WPML változatlanul másolja át az értékét a fordításba:

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

Egy group, tabs vagy repeater esetében a "translate": false minden belső mezőre, a beágyazott tárolókat is beleértve, érvényes. A gyermekelem nem írhatja felül a kihagyásra beállított tároló értékét a "translate": true használatával. Egy files mezőn a false a mellékletazonosítókat is kihagyja, így a fordítás megtartja az eredeti mellékleteket.

A translate elhagyása vagy true értékre állítása megőrzi a meglévő működést: a mezőtípus dönt. Ettől a rejtett mezők és az olyan értéktípusok, mint a select, nem válnak fordíthatóvá. A beállítás a blokk- és bővítménymezőkre vonatkozik, nem rejti el és nem tiltja le a szerkesztői vezérlőket, és nem módosítja a tárolt értékeket. A beállítás módosítása után futtassa újra a wp bs wpml config parancsot, és frissítse a wpml-config.xml fájlt a létrehozott konfigurációval.

Minden kulcs label része a mező címkéje, amely előtt az azonosítóval rendelkező befoglaló ismétlőmezők és csoportok címkéi állnak. A WPML ezt jeleníti meg mezőnévként a fordítói felületen. Egy link mező két kulcsa Link text és URL utótagot fűz a címkéhez. Ezek az utótagok a webhely nyelvére fordulnak, ezért a parancsot azon a területi beállításon futtassa, amelyen a fordítók dolgoznak.

Egyéni mezőtípusok

A sima szöveges karakterláncot tároló mezőtípus ezt a regisztrációjakor jelzi. A definícióban állítsa a translate értékét true értékre; ehhez a attribute értékének string-nak/-nek kell lennie:

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

A parancs ezután az adott típus minden mezőjét fordítható szövegként jelöli meg. Egy mező továbbra is beállíthatja a "translate": false értéket, hogy kimaradjon. Az opció nélkül a típus mezői kimaradnak, és a parancs a korábbiak szerint jelzi őket.

Címkék módosítása

A mezőcímkék a blokkszerkesztőhöz készülnek, és olyan útmutatásokat is tartalmazhatnak, mint az „Image (optional)”, amelyeknek nincs jelentésük a fordításszerkesztőben. A blockstudio/wpml/config/label szűrő minden címkét a kiírása előtt kap meg, a kulcs kontextusával együtt:

  • block: a blokk neve.
  • path: a mező blockstudio.attributes alatti tárolási útvonala, minden ismétlő soraihoz egy * szinttel, például cards/*/link.
  • field: a mező definíciója.
  • parents: a körülvevő ismétlők és azonosítóval rendelkező csoportok címkéi.
  • part: text szövegmező esetén, title vagy url pedig a hivatkozásmező két kulcsához.
PHP
add_filter('blockstudio/wpml/config/label', function ($label, $context) {
  return str_replace(' (optional)', '', $label);
}, 10, 2);

Adjon vissza üres karakterláncot, ha ki szeretné hagyni egy kulcs címkéjét; ekkor a WPML a blokk címkéjét jeleníti meg helyette. Ha a visszatérési érték nem karakterlánc, az eredeti címke marad érvényben. A szűrő módosítása után futtassa újra a parancsot.

Azonos tárolási kulcsú mezők

Két mező ugyanahhoz a tárolási kulcshoz vezethet, például egy blokkmező és egy olyan bővítménymező esetén, amelynek ugyanaz a id értéke, vagy a text mezőnél egy cta azonosítójú csoportban, valamint egy cta_text azonosítójú mezőnél. A parancs csak akkor deklarál ilyen kulcsot, ha egyértelmű, hogy mit tárol:

  • Egy blokk mezői között, az ismétlősorokon kívül a Blockstudio tárolási kulcsonként egy attribútumot regisztrál, így egy későbbi mező felülírja a korábbit, annak típusától függetlenül. A blokk bővítményeinek mezői ugyanígy működnek: egy későbbi mező vagy egy később regisztrált bővítmény mezője felülírja a korábbit.
  • Az azonos kulcsú blokkmező és bővítménymező egyaránt érvényben marad. A blokksablon az értéket a blokk mezőjének definíciója szerint kapja meg, míg a bővítmény a saját mezőjével alkalmazza. A kulcs csak akkor kap egyszeri deklarációt, ha mindkét mezőhöz ugyanaz a deklaráció szükséges: mindkettő szövegmező (text, textarea, richtext vagy wysiwyg), mindkettő hivatkozás, mindkettő files mező (bármelyikükön multiple esetén a kulcs * szintet kap), vagy egyik sincs deklarálva, például egy select és egy number esetén. A két ismétlő mezőit soronként, mezőről mezőre hasonlítja össze. A címke a blokk mezőjéből származik.
  • Az ugyanazzal a id értékkel rendelkező két mező egy ismétlő soraiban szintén érvényben marad, és ugyanígy hasonlítja össze őket.

Ha a típusok eltérnek, például a blokkban lévő text mező és a bővítményben lévő select mező esetén, a tárolt érték szöveg vagy egy kiválasztott lehetőség attól függően, melyik vezérlő írta. A parancs nem deklarálja a kulcsot, és figyelmeztetést ír ki:

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

Nevezze át az egyik mezőt, vagy állítsa be mindkettőnél ugyanazt a típust, hogy a kulcs deklarálva legyen.

Tartsa naprakészen a konfigurációt

Mezők hozzáadása, eltávolítása vagy átnevezése után futtassa újra a parancsot, és a frissített fájlt mellékelje a témához vagy a bővítményhez. Generálja újra az 7.7.5 előtt készült konfigurációkat, hogy azonosítóval rendelkező mellékletdeklarációk is bekerüljenek. Az eredeti tartalom frissítése után a korábban meglévő tartalmakban fordíthatóvá válnak az új mezők, a fent bemutatott WPML útmutató szerint.

A --file használatakor a parancs létrehozza a hiányzó fájlt. Meglévő fájlban csak a <!-- blockstudio:start --> és a <!-- blockstudio:end --> közötti szöveget cseréli le, így a többi szakasz és a többi blokkhoz tartozó bejegyzések változatlanok maradnak:

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>

Ha olyan meglévő fájlt szeretne használni, amelyben még nincsenek jelölők, adja hozzá egyszer a két jelölős sort az gutenberg-blocks eleméhez, vagy ha ilyen elem nincs a fájlban, adjon hozzá egy gutenberg-blocks elemet a jelölőkkel. Jelölők nélkül, illetve ha az eredmény nem lenne érvényes konfiguráció, a parancs változatlanul hagyja a fájlt, és hibával lép ki.

A kézzel írt Blockstudio blokkok bejegyzéseire, például a technikai értékeket elrejtő translate="0" bejegyzésekre már nincs szükség, ha a generált szakasz lefedi a blokkot. A parancs figyelmeztetést ad minden többször deklarált blokkról, így ezek a bejegyzések eltávolíthatók.

Képszövegek a fordítási feladatokban

A WPML az oldal által használt képek szövegeit is hozzáadja az oldal fordítási feladatához: cím, alternatív szöveg, képaláírás és leírás. A feladat befejezésekor a WPML a lefordított szövegeket a célnyelv mellékletéhez írja, és létrehozza azt, ha még nem létezik. Lásd: Média fordítása. A WPML a tartalomban lévő <img> címkékben, galériákban, a kiemelt képen és az általa ismert blokkokban keresi a képeket. Egy Blockstudio blokk a mellékletazonosítókat a blokk megjegyzésében tárolja, ezért a WPML nem találja meg ezeket.

Ha a WPML aktív, a Blockstudio hozzáadja az oldal blokkjainak mezőiben tárolt mellékleteket a megtalált képekhez (WPML):

  • files mezők, a rejtetteket is beleértve, valamint attributes mezők media értékkel; ezek ugyanazok a mezők, amelyeket a blokkszerkesztő médiaként betölt.
  • Mezők csoportokban, lapokon, ismétlősorokban és belső blokkokban.
  • A bővítmények mezői, az alapblokkokon és más bővítmények blokkjain is, mert ezek értékei a bővített blokk attribútumaiban tárolódnak.

A nem mellékletazonosító értékek kimaradnak. Semmit sem kell beállítani, és a wpml-config.xml nincs használatban. A WPML nélkül a program nem keresi a fordítási feladatokhoz szükséges elemeket, és a médiaintegrációs osztály sem töltődik be.

Ez elkülönül a mellékletazonosító átalakításától: a generált XML megadja a WPML számára, hogy melyik lefordított mellékletet jelenítse meg, ez az integráció pedig azt határozza meg, mely melléklethoz tartozó szövegeket kell a fordítási feladatba felvenni. A szöveges hivatkozások és a nem mellékletbejegyzések azonosítói nem kerülnek a médiafeladatokba. Az Blockstudio blokkoknál a mentett beágyazott mezőértékek elsőbbséget élveznek a legfelső szintű értékekkel szemben, a megjelenítéskor alkalmazott módon.

A szövegek csak akkor kerülnek be a feladatba, ha engedélyezve van az WPML > Settings > Media Translation alatti képszöveg-beállítások egyike: „Automatically detect best options for translating image texts” vagy „Translate Media Library texts when translating content”, az alapblokkokban található képekhez hasonlóan.

Blockstudio a képeket a wpml_ids_of_media_used_in_post szűrőn keresztül jelenti, amely WPML egy bejegyzés médiatartalmára vonatkozik a PostWithMediaFiles-ban. Ha ki szeretne hagyni egy képet a feladatokból, távolítsa el az azonosítóját ugyanazon a szűrőn futó, 10-nél nagyobb prioritású visszahívásban:

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