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:
wp bs wpml config > wp-content/themes/my-theme/wpml-config.xml
Alebo nechajte príkaz vytvoriť súbor:
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:
{
"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:
<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
translatenastaveným natrue. Príkaz pri každom vypíše upozornenie, pretože len typ poľa vie, či jeho hodnota obsahuje text. Výslovné nastavenie"translate": falsepre pole toto upozornenie potlačí. Pozrite nižšie. - Atribúty, ktoré blok deklaruje vo svojom natívnom
attributesnamiesto 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:
{
"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:
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 podblockstudio.attributess úrovňou*pre riadky každého opakovača, napríkladcards/*/link.field: definícia poľa.parents: označenia nadradených opakovačov a skupín s ID.part:textpre textové pole,titlealebourlpre dva kľúče poľa odkazu.
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,richtextalebowysiwyg), obe sú odkazy, obe sú poliafiles(smultiplena ktoromkoľvek z nich má kľúč úroveň*) alebo nie je deklarované ani jedno, napríkladselectanumber. 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
idv 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:
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é:
<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
filesvrátane skrytých a poliaattributessmedia; 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:
add_filter(
'wpml_ids_of_media_used_in_post',
function ( $ids ) {
return array_values( array_diff( $ids, array( 42 ) ) );
},
20
);