Pereiti prie turinio

WPML

WPML verčia pasirinktinio bloko atributus tik tiek, kiek nurodo kalbos konfigūracijos failas. Blockstudio saugo kiekvieno lauko reikšmę bloko komentare po blockstudio.attributes, todėl kiekvienam blokui reikia įrašo, kuris nurodo WPML į jo teksto laukus ir priedų ID. Komanda wp bs wpml config sukuria šiuos įrašus kiekvienam registruotam blokui.

Kodėl blokams reikia konfigūracijos

WPML nuskaito konfigūraciją iš failo, pavadinto wpml-config.xml, aktyvios temos ir kiekvieno aktyvaus papildinio šakniniame aplanke. Jei privalomasis papildinys yra vienas failas, aplankas pavadinamas kaip failas, tik be .php. Žr. Kalbos konfigūracijos failai ir Kaip padaryti pasirinktinius Gutenberg blokus išverčiamus.

Blokas be įrašo paliekamas WPML automatiniam eilučių aptikimui, kuris vertimui pateikia kiekvieną bloko eilutės atributą. Blokui Blockstudio, kuriame yra pasirinkimo reikšmės, failų nuorodos, URL ir CSS klasės. Vertėjai šias technines reikšmes mato greta tikrojo teksto, o išversta pasirinkimo reikšmė arba klasė gali sugadinti bloką.

Generuoti konfigūraciją

Išveskite konfigūraciją ir išsaugokite ją temos arba papildinio, kuriame yra blokai, šakniniame aplanke:

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

Arba leiskite komandai įrašyti failą:

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

Blokas su teksto lauku, vaizdu, nuoroda ir kartotuvu:

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

tampa:

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>

Reikšmė style nedeklaruota, todėl WPML ją nukopijuoja į vertimą nepakeistą. Taip pat nukopijuojami gallery ir image ID, o WPML, atvaizduojant bloką, kiekvieną jų pakeičia puslapio kalbos priedu, todėl išverstas vaizdas gali turėti savo alternatyvųjį tekstą. Žr. „Automatinis ID konvertavimas blokuose“ skirsnyje Kaip padaryti pasirinktinius Gutenberg blokus išverčiamus. Jei priedas neturi vertimo, WPML palieka pradinį ID.

Kas deklaruojama

Komanda nuskaito registruotus blokus, kai custom/ laukai ir blokų laukai išskleisti, o nepaisymo nustatymai ir atributų filtrai pritaikyti. Įtraukiami laukai, kuriuos plėtiniai prideda prie Blockstudio bloko. Neįtraukiami laukai, kuriuos plėtiniai prideda prie pagrindinių blokų arba kitų papildinių blokų, nes šių blokų konfigūracija gaunama iš WPML arba jų papildinio.

Laukas Deklaracija
text, textarea, richtext, wysiwyg Verčiamas tekstas.
link title kaip tekstas ir url su type="link", kad WPML pakeistų nuorodą jos vertimu, jei toks yra.
files Išsaugotas priedo ID su type="post-ids" ir sub-type="attachment". Jei naudojamas multiple, sąrašo lygmuo, pavadintas *; jis taip pat atitinka vieną ID, kurį laukas išsaugo pasirinkus vieną failą.
repeater Lygmuo, pavadintas *, atitinkantis kiekvieną eilutę, su eilutės laukų deklaracijomis. Įdėtiniai kartotuvai veikia taip pat.
group su id Grupės laukai, o grupės ID naudojamas kaip rakto priešdėlis (cta_text lauko text grupėje cta).
group be id, tabs Laukai be atskiro lygmens.
Pasirinktinis lauko tipas, užregistruotas nustačius translate į true Verčiamas tekstas, kaip ir text lauko atveju.
Visi kiti įtaisyti tipai Nedeklaruojami. WPML nukopijuoja reikšmę nepakeistą.

Blokas, kuriame nėra deklaruoto teksto lauko, gauna translate="0". Tada WPML nukopijuoja visas jo reikšmes ir nepateikia jų versti. Jo files laukai vis tiek deklaruojami įraše, nes WPML konvertuoja priedų ID, nepaisydamas translate reikšmės. Įdėtiniai blokai verčiami kaip įprasta.

Nedeklaruojama:

  • Laukai su hidden, nes redaktoriai jų reikšmių neįrašo.
  • Laukai su "translate": false, žr. toliau.
  • pasirinktinių laukų tipų laukai, kurie neužregistruoti nustačius translate į true. Komanda pateikia įspėjimą dėl kiekvieno tokio lauko, nes tik lauko tipas žino, ar jo reikšmė yra tekstas. Aiškiai nustačius lauko "translate": false, šis įspėjimas taip pat nerodomas. Žr. toliau.
  • Atributai, kuriuos blokas deklaruoja savo vietiniame attributes, o ne kaip Blockstudio laukus.
  • Saugyklos raktai, kurių laukai yra skirtingų tipų, žr. toliau.

Deklaruojamas kiekvienas teksto laukas, įskaitant tokį, kuriame laikoma techninė reikšmė, pavyzdžiui, CSS klasė, nebent nurodyta "translate": false.

Neįtraukti lauko

Teksto lauke gali būti reikšmė, kuri turi būti vienoda visomis kalbomis: paskyros vardas, el. pašto adresas, inkaro nuoroda ar CSS klasė. WPML pateikia ją versti kaip bet kurį kitą tekstą, o išversta reikšmė gali sugadinti bloką. Nustatykite translate į false, kad laukas nebūtų įtrauktas į konfigūraciją ir WPML nukopijuotų jo reikšmę į vertimą nepakeistą:

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

Jei naudojamas group, tabs arba repeater, "translate": false taikomas kiekvienam laukui, įskaitant įdėtinius konteinerius. Vaikinis elementas negali pakeisti šio nustatymo konteineryje, kuriam jis pritaikytas, naudodamas "translate": true. Jei tai files laukas, false neįtraukia ir priedų ID, todėl vertime paliekami pradiniai priedai.

Praleidus translate arba nustačius jį į true, išlaikoma esama elgsena: sprendimą priima lauko tipas. Tai neleidžia versti paslėptų laukų ar tokių reikšmių tipų kaip select. Parinktis taikoma blokų ir plėtinių laukams, neslepia ir neišjungia jų redaktoriaus valdiklių bei nekeičia išsaugotų reikšmių. Pakeitę nustatymą, dar kartą paleiskite wp bs wpml config ir atnaujinkite savo wpml-config.xml naudodami sugeneruotą konfigūraciją.

Kiekvieno rakto label yra lauko žyma, prieš kurią pateikiamos identifikatorių turinčių pirminių kartotuvų ir grupių žymos. WPML ją rodo kaip lauko pavadinimą vertimo redaktoriuje. Du link lauko raktai prie žymos prideda Link text ir URL. Šios priesagos išverčiamos į svetainės kalbą, todėl komandą paleiskite ta kalba, kuria dirba jūsų vertėjai.

Pasirinktiniai laukų tipai

Lauko tipas, kuriame saugoma paprasta teksto eilutė, tai nurodo registruojant. Apraše nustatykite translate į true; tam reikia, kad attribute būtų string:

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

Tada komanda paskelbia visus to tipo laukus verčiamu tekstu. Laukas vis tiek gali nustatyti "translate": false, kad pats nebūtų įtrauktas. Jei ši parinktis nenurodyta, tipo laukai, kaip ir anksčiau, neįtraukiami ir apie juos pranešama.

Pakeiskite etiketes

Laukų etiketės skirtos blokų redaktoriui ir gali turėti užuominų, pavyzdžiui, „Image (optional)“, kurios vertimo redaktoriuje nieko nereiškia. Filtras blockstudio/wpml/config/label gauna kiekvieną etiketę prieš ją įrašant, kartu su rakto kontekstu:

  • block: bloko pavadinimas.
  • path: lauko saugojimo kelias po blockstudio.attributes, su * lygiu kiekvienos kartotuvo eilutėms, pavyzdžiui, cards/*/link.
  • field: lauko apibrėžtis.
  • parents: išorinių kartotuvų ir grupių su ID etiketės.
  • part: text teksto laukui, title arba url dviem nuorodos lauko raktams.
PHP
add_filter('blockstudio/wpml/config/label', function ($label, $context) {
  return str_replace(' (optional)', '', $label);
}, 10, 2);

Grąžinkite tuščią eilutę, kad rakto etiketė nebūtų įtraukta; tuomet WPML vietoj jos rodo bloko etiketę. Jei grąžinama reikšmė nėra eilutė, paliekama pradinė etiketė. Pakeitę filtrą, paleiskite komandą dar kartą.

Laukai su tuo pačiu saugojimo raktu

Dviejų laukų saugojimo raktas gali sutapti, pavyzdžiui, bloko lauko ir plėtinio lauko, turinčių tą patį id, arba grupės lauko text, kai grupės ID yra cta, ir lauko, kurio ID yra cta_text. Komanda tokį raktą paskelbia tik tada, kai aišku, kokie duomenys jame saugomi:

  • Tarp bloko laukų, neįskaitant kartotuvo eilučių, Blockstudio kiekvienam saugojimo raktui registruoja po vieną atributą, todėl vėlesnis laukas pakeičia ankstesnį, nepaisant jo tipo. Bloko plėtinių laukai veikia taip pat: vėlesnis laukas arba vėliau užregistruoto plėtinio laukas pakeičia ankstesnį.
  • Bloko laukas ir tokį patį raktą turintis plėtinio laukas abu lieka galioti. Bloko šablonas gauna reikšmę taip, kaip ją apibrėžia bloko laukas, o plėtinys pritaikomas pagal savo lauką. Raktas paskelbiamas vieną kartą, kai abiem laukams reikia to paties apibrėžimo: abu yra teksto laukai (text, textarea, richtext arba wysiwyg), abu yra nuorodos, abu yra files laukai (jei kuriam nors taikomas multiple, raktui priskiriamas * lygis) arba nė vienas nepaskelbiamas, pavyzdžiui, select ir number. Du kartotuvai lyginami pagal kiekvieną jų eilučių lauką. Etiketė imama iš bloko lauko.
  • Du laukai, turintys tą patį id vieno kartotuvo eilutėse, taip pat abu lieka galioti ir lyginami tokiu pačiu būdu.

Kai tipai skiriasi, pavyzdžiui, bloke yra laukas text, o plėtinyje – select, saugoma reikšmė priklauso nuo ją įrašiusio valdiklio: tai gali būti tekstas arba pasirinkimo parinktis. Komanda rakto nepaskelbia ir parodo įspėjimą:

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)

Pervadinkite vieną iš laukų arba abiem priskirkite tą patį tipą, kad raktas būtų paskelbtas.

Nuolat atnaujinkite konfigūraciją

Pridėję, pašalinę ar pervadinę laukus, paleiskite komandą dar kartą ir įtraukite atnaujintą failą į temą arba įskiepį. Iš naujo sugeneruokite konfigūracijas, sukurtas iki 7.7.5, kad jose būtų priedų ID apibrėžtys. Turinys, sukurtas anksčiau, naujus laukus vertimui parodys atnaujinus jo originalą, kaip aprašyta pirmiau pateiktame WPML vadove.

Naudojant --file, komanda sukuria trūkstamą failą. Esamame faile ji pakeičia tik tekstą tarp <!-- blockstudio:start --> ir <!-- blockstudio:end -->, todėl kitos dalys ir kitų blokų įrašai lieka nepakeisti:

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>

Jei norite naudoti esamą failą, kuriame dar nėra žymeklių, vieną kartą įterpkite abi žymeklių eilutes į jo gutenberg-blocks elementą arba pridėkite gutenberg-blocks elementą su žymekliais, jei faile tokio nėra. Jei žymeklių nėra arba rezultatas nebūtų tinkama konfigūracija, komanda failo nepakeičia ir baigiama pateikdama klaidą.

Nebereikia rankiniu būdu įrašytų Blockstudio blokų įrašų, pavyzdžiui, translate="0" įrašų, kurie paslepia technines reikšmes, kai sugeneruota dalis jau apima bloką. Komanda įspėja apie kiekvieną daugiau nei kartą paskelbtą bloką, todėl šiuos įrašus galima pašalinti.

Paveikslėlių tekstai vertimo užduotyse

WPML į puslapio vertimo užduotį įtraukia jame naudojamų paveikslėlių tekstus: pavadinimą, alternatyvųjį tekstą, antraštę ir aprašą. Užbaigus užduotį, WPML įrašo išverstus tekstus į tikslinės kalbos priedą ir sukuria tą priedą, jei jo dar nėra. Žr. Kaip versti mediją. WPML turinyje randa paveikslėlius, esančius <img> žymose, galerijose, pagrindiniame paveikslėlyje ir jai žinomuose blokuose. Blokas Blockstudio priedų ID saugo bloko komentare, todėl WPML jų neranda.

Kai aktyvi WPML, Blockstudio prie rastų paveikslėlių WPML prideda ir puslapio blokuose esančius priedus, kurių ID saugo jos laukai:

  • files laukai, įskaitant paslėptus, ir attributes laukai su media – tie patys laukai, kuriuos blokų redaktorius įkelia kaip mediją.
  • Grupėse, skirtukuose, kartotuvų eilutėse ir vidiniuose blokuose esantys laukai.
  • plėtinių laukai, taip pat pagrindinių blokų ir kitų įskiepių blokų laukai, nes jų reikšmės saugomos išplėsto bloko atributuose.

Reikšmės, kurios nėra priedo ID, praleidžiamos. Nieko nereikia konfigūruoti, o wpml-config.xml nenaudojama. Jei neįjungta WPML, vertimo užduotims niekas nenuskaitoma, o medijos integravimo klasė neįkeliama.

Tai atskira funkcija nuo priedų ID konvertavimo: sugeneruotas XML nurodo WPML, kurį išverstą priedą pateikti, o ši integracija nurodo, kuriuos priedų tekstus įtraukti į vertimo užduotį. Eilučių nuorodos ir ne priedams priklausančių įrašų ID į medijos užduotis neįtraukiami. Išsaugotos įdėtųjų laukų reikšmės turi pirmenybę prieš aukščiausio lygio reikšmes blokuose Blockstudio, kaip ir pateikiant turinį.

Tekstai į užduotį įtraukiami tik tada, kai skiltyje WPML > Settings > Media Translation įjungta bent viena paveikslėlių teksto parinktis: „Automatically detect best options for translating image texts“ arba „Translate Media Library texts when translating content“, kaip ir pagrindinių blokų paveikslėlių atveju.

Blockstudio pateikia vaizdus per filtrą wpml_ids_of_media_used_in_post, kuris WPML taikomas įrašo laikmenoms PostWithMediaFiles. Jei norite neįtraukti vaizdo į užduotis, pašalinkite jo ID atgalinio iškvietimo funkcijoje, priskirtoje tam pačiam filtrui su didesniu nei 10 prioritetu:

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