Preskočiť na obsah

WPML

WPML prekladá atribúty vlastného bloku iba v rozsahu, ktorý deklaruje jazykový konfiguračný súbor. Blockstudio ukladá každú hodnotu poľa do komentára bloku pod blockstudio.attributes, takže každý blok potrebuje záznam, ktorý nasmeruje WPML na jeho textové polia a ID príloh. Príkaz wp bs wpml config vytvorí tieto záznamy pre každý registrovaný blok.

Prečo bloky potrebujú konfiguráciu

WPML načíta konfiguráciu zo súboru s názvom wpml-config.xml v koreňovom priečinku aktívnej témy a každého aktívneho doplnku. Pri jedno-súborovom povinnom plugine sa priečinok volá rovnako ako súbor bez .php. Pozrite si Súbory konfigurácie jazykov a Preklady vlastných blokov Gutenberg.

Blok bez záznamu ponecháva WPML automatickému rozpoznávaniu reťazcov, ktoré ponúka na preklad každý reťazcový atribút bloku. Pri bloku Blockstudio obsahuje aj hodnoty výberov, odkazy na súbory, URL a triedy CSS. Prekladatelia tak vidia tieto technické hodnoty vedľa skutočného textu a preložená hodnota výberu alebo trieda môže blok poškodiť.

Vygenerovanie konfigurácie

Vypíšte konfiguráciu a uložte ju do koreňového priečinka témy alebo doplnku, ktorý obsahuje bloky:

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

Alebo nechajte príkaz vytvoriť súbor:

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

Blok s textovým poľom, obrázkom, odkazom a opakovačom:

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

sa zmení na:

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>

Hodnota style nie je deklarovaná, preto ju WPML skopíruje do prekladu bez zmien. Skopírujú sa aj identifikátory gallery a image a WPML pri vykreslení bloku nahradí každý z nich prílohou v jazyku stránky. Preložený obrázok tak môže mať vlastný alternatívny text. Pozrite si časť „Automatická konverzia identifikátorov v blokoch“ v dokumente Preklady vlastných blokov Gutenberg. Ak príloha nemá preklad, WPML ponechá pôvodný identifikátor.

Čo sa deklaruje

Príkaz načíta zaregistrované bloky po rozšírení polí custom/ a polí blokov a po použití prepísaní a filtrov atribútov. Zahrnuté sú polia, ktoré rozšírenia pridajú do bloku Blockstudio. Polia, ktoré rozšírenia pridajú do jadrových blokov alebo blokov iných doplnkov, zahrnuté nie sú, pretože tieto bloky získavajú konfiguráciu z WPML alebo z vlastného doplnku.

Pole Deklarácia
text, textarea, richtext, wysiwyg Preložiteľný text.
link title ako text a url s type="link", aby WPML nahradil odkaz jeho prekladom, ak je dostupný.
files Uložený identifikátor prílohy s type="post-ids" a sub-type="attachment". Pri multiple sa pre zoznam použije úroveň s názvom *, ktorá zodpovedá aj jedinému identifikátoru uloženému po výbere jedného súboru.
repeater Úroveň s názvom * zodpovedá každému riadku a obsahuje deklarácie polí daného riadka. Vnorené opakovače fungujú rovnako.
group s id Polia skupiny s ID skupiny ako predponou kľúča (cta_text pre pole text v skupine cta).
group bez id, tabs Polia bez vlastnej úrovne.
Vlastný typ poľa zaregistrovaný s translate nastaveným na true Preložiteľný text, ako pri poli text.
Každý iný vstavaný typ Nie je deklarovaný. WPML skopíruje hodnotu bez zmien.

Blok bez deklarovaného textového poľa dostane translate="0". WPML potom skopíruje všetky jeho hodnoty a neponúkne z neho nič na preklad. Jeho polia files sú v zázname stále deklarované, pretože WPML konvertuje identifikátory príloh bez ohľadu na to, čo určuje translate. Vnorené bloky sa prekladajú ako zvyčajne.

Nedeklarujú sa:

  • Polia s hidden, pretože ich hodnoty nezapisujú editory.
  • Polia s "translate": false, pozrite nižšie.
  • Polia vlastných typov polí, ktoré nie sú zaregistrované s translate nastaveným na true. Príkaz pri každom vypíše upozornenie, pretože len typ poľa vie, či jeho hodnota obsahuje text. Výslovné nastavenie "translate": false pre pole toto upozornenie potlačí. Pozrite nižšie.
  • Atribúty, ktoré blok deklaruje vo svojom natívnom attributes namiesto v poliach Blockstudio.
  • Kľúče úložiska, ktorých polia majú odlišné typy, pozrite nižšie.

Deklaruje sa každé textové pole vrátane polí s technickou hodnotou, napríklad triedou CSS, pokiaľ nenastaví "translate": false.

Vynechanie poľa

Textové pole môže obsahovať hodnotu, ktorá musí byť rovnaká vo všetkých jazykoch: názov účtu, e-mailovú adresu, kotvu alebo triedu CSS. WPML ju ponúkne na preklad ako každý iný text a preložená hodnota môže blok poškodiť. Nastavte translate na false, aby sa pole vynechalo z konfigurácie a WPML skopírovalo jeho hodnotu do prekladu bez zmien:

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

Pri group, tabs alebo repeater sa nastavenie "translate": false uplatní na každé vnútorné pole vrátane vnorených kontajnerov. Podradené pole nemôže prepísať nastavenie kontajnera vyňatého z prekladu pomocou "translate": true. Pri poli files false vynechá aj identifikátory príloh, takže preklad zachová pôvodné prílohy.

Vynechanie translate alebo nastavenie na true zachová existujúce správanie: o rozhodnutí rozhoduje typ poľa. Skryté polia ani typy hodnôt, ako napríklad select, sa tým nestanú preložiteľnými. Nastavenie sa uplatní na polia blokov a rozšírení, neskryje ani nevypne ovládacie prvky v editore a nezmení uložené hodnoty. Po zmene nastavenia znova spustite wp bs wpml config a aktualizujte svoj wpml-config.xml vygenerovanou konfiguráciou.

label každého kľúča tvorí názov poľa, pred ktorým sú názvy nadradených opakovačov a skupín s ID. WPML ho zobrazuje ako názov poľa v editore prekladov. Dva kľúče poľa link pridávajú do názvu Link text a URL. Tieto prípony sa prekladajú do jazyka stránky, preto príkaz spustite v jazyku, v ktorom pracujú vaši prekladatelia.

Vlastné typy polí

Typ poľa, ktorý ukladá obyčajný textový reťazec, to oznámi pri registrácii. V definícii nastavte translate na true; na to treba, aby attribute malo hodnotu string:

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

Príkaz potom označí každé pole daného typu ako prekladateľný text. Pole sa môže stále nastavením "translate": false z prekladu vynechať. Bez tejto možnosti sa polia daného typu vynechajú a nahlásia ako predtým.

Zmena označení

Označenia polí sú určené pre editor blokov a môžu obsahovať pokyny, napríklad „Obrázok (voliteľné)“, ktoré v editore prekladov nemajú význam. Filter blockstudio/wpml/config/label dostane každé označenie ešte pred jeho zápisom spolu s kontextom kľúča:

  • block: názov bloku.
  • path: cesta úložiska poľa pod blockstudio.attributes s úrovňou * pre riadky každého opakovača, napríklad cards/*/link.
  • field: definícia poľa.
  • parents: označenia nadradených opakovačov a skupín s ID.
  • part: text pre textové pole, title alebo url pre dva kľúče poľa odkazu.
PHP
add_filter('blockstudio/wpml/config/label', function ($label, $context) {
  return str_replace(' (optional)', '', $label);
}, 10, 2);

Vrátením prázdneho reťazca vynecháte označenie kľúča, takže WPML namiesto neho zobrazí označenie bloku. Ak návratová hodnota nie je reťazec, zachová sa pôvodné označenie. Po zmene filtra spustite príkaz znova.

Polia s rovnakým kľúčom úložiska

Dve polia môžu mať rovnaký kľúč úložiska, napríklad pole bloku a pole rozšírenia s rovnakým id alebo pole text v skupine s ID cta a pole s ID cta_text. Príkaz takýto kľúč deklaruje iba vtedy, keď je jasné, čo sa v ňom ukladá:

  • Medzi poľami bloku mimo riadkov opakovača Blockstudio registruje jeden atribút pre každý kľúč úložiska. Neskoršie pole tak nahradí skoršie bez ohľadu na jeho typ. Rovnako to funguje aj pri rozšíreniach bloku: neskoršie pole alebo pole neskôr zaregistrovaného rozšírenia nahradí skoršie.
  • Pole bloku aj pole rozšírenia s rovnakým kľúčom zostávajú účinné. Šablóna bloku dostane hodnotu podľa definície poľa bloku, zatiaľ čo rozšírenie sa použije s vlastným poľom. Kľúč sa deklaruje raz, ak obe polia vyžadujú rovnakú deklaráciu: obe sú textové polia (text, textarea, richtext alebo wysiwyg), obe sú odkazy, obe sú polia files (s multiple na ktoromkoľvek z nich má kľúč úroveň *) alebo nie je deklarované ani jedno, napríklad select a number. Dva opakovače sa porovnávajú po jednotlivých poliach v ich riadkoch. Označenie sa preberá z poľa bloku.
  • Aj dve polia s rovnakým id v riadkoch jedného opakovača zostávajú účinné a porovnávajú sa rovnakým spôsobom.

Ak sa typy líšia, napríklad pole text v bloku a pole select v rozšírení, uložená hodnota je text alebo možnosť výberu podľa ovládacieho prvku, ktorý ju zapísal. Príkaz kľúč nedeklaruje a vypíše upozornenie:

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)

Premenujte jedno z polí alebo obom nastavte rovnaký typ, aby sa kľúč deklaroval.

Udržujte konfiguráciu aktuálnu

Po pridaní, odstránení alebo premenovaní polí spustite príkaz znova a aktualizovaný súbor pribaľte k téme alebo doplnku. Konfigurácie vytvorené pred 7.7.5 vygenerujte znova, aby obsahovali deklarácie ID príloh. V obsahu vytvorenom skôr sa nové polia zobrazia na preklad až po aktualizácii originálu, ako je opísané vyššie v návode WPML.

Pomocou --file príkaz vytvorí chýbajúci súbor. V existujúcom súbore nahradí iba text medzi <!-- blockstudio:start --> a <!-- blockstudio:end -->, takže ostatné časti a záznamy pre ďalšie bloky zostanú zachované:

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>

Ak chcete použiť existujúci súbor, ktorý ešte nemá značky, pridajte tieto dva riadky so značkami raz dovnútra jeho prvku gutenberg-blocks alebo pridajte prvok gutenberg-blocks aj so značkami, ak súbor žiadny nemá. Bez značiek alebo ak by výsledok nebol platnou konfiguráciou príkaz súbor nezmení a skončí s chybou.

Záznamy pre bloky Blockstudio pridané ručne, napríklad záznamy translate="0", ktoré skrývajú technické hodnoty, už nie sú potrebné, keď vygenerovaná časť pokrýva daný blok. Príkaz upozorní na každý blok deklarovaný viac než raz, takže tieto záznamy možno odstrániť.

Texty obrázkov v úlohách prekladu

WPML pridáva texty obrázkov použitých na stránke do úlohy prekladu danej stránky: názov, alternatívny text, popis a opis. Po dokončení úlohy WPML zapíše preložené texty do prílohy v cieľovom jazyku a vytvorí ju, ak ešte neexistuje. Pozrite si Ako prekladať médiá. WPML vyhľadáva obrázky v značkách <img> v obsahu, v galériách, v náhľadovom obrázku a v blokoch, ktoré pozná. Blok Blockstudio ukladá ID príloh do komentára bloku, preto ich WPML nenájde.

Keď je aktívne WPML, Blockstudio pridá medzi nájdené obrázky aj prílohy, ktorých ID sú uložené v poliach blokov stránky WPML:

  • Polia files vrátane skrytých a polia attributes s media; ide o tie isté polia, ktoré editor blokov načítava ako médiá.
  • Polia v skupinách, kartách, riadkoch opakovačov a vnorených blokoch.
  • Polia rozšírení vrátane polí v základných blokoch a blokoch iných doplnkov, pretože ich hodnoty sa ukladajú do atribútov rozšíreného bloku.

Hodnoty, ktoré nie sú ID prílohy, sa vynechajú. Nie je potrebné nič konfigurovať a wpml-config.xml sa nepoužíva. Bez WPML sa nič neskenuje pre úlohy prekladu a trieda integrácie médií sa nenačíta.

Ide o samostatnú funkciu od konverzie ID príloh: vygenerovaný XML informuje WPML, ktorú preloženú prílohu má vykresliť, zatiaľ čo táto integrácia určuje, ktoré texty prílohy sa majú zahrnúť do úlohy prekladu. Odkazy na reťazce a ID príspevkov, ktoré nie sú prílohami, sa do úloh prekladu médií nepridávajú. Uložené hodnoty vnorených polí majú pri blokoch Blockstudio prednosť pred hodnotami najvyššej úrovne, rovnako ako pri vykresľovaní.

Texty sú súčasťou úlohy iba vtedy, keď je povolená jedna z možností pre text obrázka v časti WPML > Nastavenia > Preklad médií: „Automaticky určiť najlepšie možnosti pre preklad textov obrázkov“ alebo „Prekladať texty knižnice médií pri preklade obsahu“, rovnako ako pri obrázkoch v základných blokoch.

Blockstudio vracia obrázky cez filter wpml_ids_of_media_used_in_post, ktorý WPML sa použije na médiá príspevku v PostWithMediaFiles. Ak chcete obrázok vynechať z úloh, odstráňte jeho ID v callbacku na rovnakom filtri s prioritou vyššou ako 10:

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