Preskoči na vsebino

WPML

WPML prevaja atribute bloka po meri samo v obsegu, ki ga določa jezikovna konfiguracijska datoteka. Blockstudio shrani vrednost vsakega polja v komentar bloka pod blockstudio.attributes, zato vsak blok potrebuje vnos, ki usmeri WPML na njegova besedilna polja in ID-je prilog. Ukaz wp bs wpml config zapiše te vnose za vsak registrirani blok.

Zakaj bloki potrebujejo konfiguracijo

WPML prebere konfiguracijo iz datoteke z imenom wpml-config.xml v korenski mapi aktivne teme in vsakega aktivnega vtičnika. Če gre za enodatotečni obvezni vtičnik, se mapa imenuje enako kot datoteka brez .php. Glejte Datoteke z jezikovnimi konfiguracijami in Poskrbite, da bodo bloki Gutenberg prevedljivi.

Če blok nima vnosa, samodejno zaznavanje nizov v WPML ponudi v prevod vsak nizovni atribut bloka. Pri bloku Blockstudio to vključuje vrednosti izbirnih polj, sklice na datoteke, URL-je in razrede CSS. Prevajalci poleg dejanskega besedila vidijo tudi te tehnične vrednosti, prevedena vrednost izbirnega polja ali razred pa lahko pokvari blok.

Ustvarjanje konfiguracije

Izpišite konfiguracijo in jo shranite v korensko mapo teme ali vtičnika, ki vključuje bloke:

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

Ali pa pustite, da ukaz zapiše datoteko:

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

Blok z besedilnim poljem, sliko, povezavo in ponavljalnikom:

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

se pretvori v:

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>

Vrednost style ni deklarirana, zato jo WPML nespremenjeno kopira v prevod. Prav tako se kopirajo ID-ja gallery in image, WPML pa pri izrisu bloka vsakega nadomesti s priponko v jeziku strani, zato ima lahko prevedena slika svoje nadomestno besedilo. Glejte »Samodejna pretvorba ID-jev v blokih« v Poskrbite, da bodo bloki Gutenberg prevedljivi. Če priponka nima prevoda, WPML ohrani izvirni ID.

Kaj je deklarirano

Ukaz prebere registrirane bloke, potem ko so polja custom/ in polja blokov razširjena ter uporabljene preglasitve in filtri atributov. Vključena so polja, ki jih razširitve dodajo bloku Blockstudio. Polja, ki jih razširitve dodajo jedrnim blokom ali blokom drugih vtičnikov, niso vključena, saj ti bloki konfiguracijo dobijo iz WPML ali lastnega vtičnika.

Polje Deklaracija
text, textarea, richtext, wysiwyg Prevedljivo besedilo.
link title kot besedilo in url z type="link", zato WPML povezavo nadomesti z njenim prevodom, če je na voljo.
files Shranjeni ID priponke z type="post-ids" in sub-type="attachment". Z multiple se uporabi raven z imenom * za seznam, ki ustreza tudi posameznemu ID-ju, shranjenemu v polju, ko je izbrana ena datoteka.
repeater Raven z imenom *, ki ustreza vsaki vrstici in vsebuje deklaracije polj vrstice. Gnezdeni ponavljalniki delujejo enako.
group z id Polja skupine, pri čemer je ID skupine predpona ključa (cta_text za polje text v skupini cta).
group brez id, tabs Polja brez lastne ravni.
Vrsta polja po meri, registrirana z translate, nastavljeno na true Prevedljivo besedilo, tako kot pri polju text.
Vse druge vgrajene vrste Niso deklarirane. WPML vrednost kopira nespremenjeno.

Blok, ki nima deklariranega besedilnega polja, prejme translate="0". WPML nato kopira vse njegove vrednosti in ne ponudi ničesar v prevod. Njegova polja files so še vedno deklarirana znotraj vnosa, ker WPML pretvarja ID-je priponk ne glede na to, kaj določa translate. Notranji bloki se prevajajo kot običajno.

Ni deklarirano:

  • Polja z hidden, ker njihovih vrednosti ne zapisujejo uredniki.
  • Polja z "translate": false; glejte spodaj.
  • Polja vrst po meri, ki niso registrirane z translate, nastavljenim na true. Ukaz za vsako izpiše opozorilo, saj samo vrsta polja ve, ali njegova vrednost vsebuje besedilo. Izrecna nastavitev "translate": false za polje prav tako prepreči to opozorilo. Glejte spodaj.
  • Atributi, ki jih blok deklarira v svojem izvornem attributes namesto kot polja Blockstudio.
  • Ključi shrambe, katerih polja imajo različne vrste; glejte spodaj.

Deklarirano je vsako besedilno polje, tudi tisto s tehnično vrednostjo, kot je razred CSS, razen če je nastavljeno "translate": false.

Izključitev polja

Besedilno polje lahko vsebuje vrednost, ki mora biti enaka v vseh jezikih: uporabniško ime, e-poštni naslov, sidro ali razred CSS. WPML ga ponudi v prevod kot vsako drugo besedilo, prevedena vrednost pa lahko pokvari blok. Nastavite translate na false, da polje izključite iz konfiguracije, tako da WPML njegovo vrednost nespremenjeno kopira v prevod:

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

Pri polju group, tabs ali repeater nastavitev "translate": false velja za vsako polje v njem, vključno z gnezdenimi vsebniki. Podrejeni vsebnik ne more razveljaviti izključitve nadrejenega vsebnika z "translate": true. Pri polju files nastavitev false izključi tudi ID-je priponk, zato prevod ohrani izvirne priponke.

Če izpustite translate ali ga nastavite na true, se ohrani obstoječe vedenje: o tem odloča vrsta polja. S tem skritih polj ali vrst vrednosti, kot je select, ne naredite prevedljivih. Možnost velja za polja blokov in razširitev, ne skrije ali onemogoči njihovih kontrolnikov v urejevalniku in ne spremeni shranjenih vrednosti. Po spremembi nastavitve znova zaženite wp bs wpml config in posodobite svoj wpml-config.xml z ustvarjeno konfiguracijo.

Vrednost label vsakega ključa je oznaka polja, pred katero so oznake nadrejenih ponavljalnikov in skupin z ID-jem. WPML jo v urejevalniku prevodov prikaže kot ime polja. Ključa polja link oznaki dodata Link text in URL. Ti priponi so prevedeni v jezik spletnega mesta, zato ukaz zaženite z jezikovno nastavitvijo, ki jo uporabljajo vaši prevajalci.

Vrste polj po meri

Vrsta polja, ki shranjuje navaden besedilni niz, to označi ob registraciji. V definiciji nastavite translate na true; za to mora biti attribute nastavljen na string:

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

Ukaz nato vsako polje te vrste označi kot besedilo za prevajanje. Polje se lahko še vedno nastavi na "translate": false in s tem izključi. Brez te možnosti so polja te vrste izključena in prijavljena kot prej.

Spremenite oznake

Oznake polj so namenjene urejevalniku blokov in lahko vsebujejo namige, kot je »Slika (izbirno)«, ki v urejevalniku prevodov nimajo pomena. Filter blockstudio/wpml/config/label prejme vsako oznako pred zapisom, skupaj s kontekstom ključa:

  • block: ime bloka.
  • path: pot shranjevanja spodnjega polja blockstudio.attributes, z ravnjo * za vrstice vsakega ponavljalnika, na primer cards/*/link.
  • field: definicija polja.
  • parents: oznake nadrejenih ponavljalnikov in skupin z ID-jem.
  • part: text za besedilno polje, title ali url za oba ključa polja povezave.
PHP
add_filter('blockstudio/wpml/config/label', function ($label, $context) {
  return str_replace(' (optional)', '', $label);
}, 10, 2);

Vrnite prazen niz, da izpustite oznako ključa, tako da WPML namesto nje prikaže oznako bloka. Če vrnjena vrednost ni niz, se ohrani izvirna oznaka. Po spremembi filtra ukaz zaženite znova.

Polja z istim ključem shrambe

Dve polji lahko dobita isti ključ shrambe, na primer polje bloka in polje razširitve z istim id ali polje text v skupini z ID-jem cta in polje z ID-jem cta_text. Ukaz tak ključ deklarira le, kadar je jasno, kaj je shranjeno:

  • Med polji bloka zunaj vrstic ponavljalnika Blockstudio registrira en atribut za vsak ključ shrambe, zato poznejše polje nadomesti prejšnje ne glede na njegovo vrsto. Enako velja za polja razširitev bloka: poznejše polje ali polje pozneje registrirane razširitve nadomesti prejšnje.
  • Polje bloka in polje razširitve z istim ključem ostaneta aktivni. Predloga bloka prejme vrednost, kot jo določa polje bloka, razširitev pa se uporabi z lastnim poljem. Ključ je deklariran enkrat, kadar obe polji zahtevata isto deklaracijo: obe sta besedilni polji (text, textarea, richtext ali wysiwyg), obe sta povezavi, obe sta polji files (če ima katero od njiju multiple, dobi ključ raven *) ali pa ni deklarirano nobeno, na primer select in number. Dva ponavljalnika se primerjata po posameznih poljih v njunih vrsticah. Oznaka je povzeta po polju bloka.
  • Tudi dve polji z istim id v vrsticah enega ponavljalnika ostaneta aktivni in se primerjata na enak način.

Če se vrsti razlikujeta, na primer če je v bloku polje text, v razširitvi pa select, je shranjena vrednost besedilo ali možnost izbire, odvisno od kontrolnika, ki jo je zapisal. Ukaz ključa ne deklarira in izpiše opozorilo:

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

Preimenujte eno od polj ali obema dodelite isto vrsto, da bo ključ deklariran.

Konfiguracijo redno posodabljajte

Ukaz zaženite znova po dodajanju, odstranitvi ali preimenovanju polj ter posodobljeno datoteko vključite v temo ali vtičnik. Znova ustvarite konfiguracije, nastale pred 7.7.5, da vključite deklaracije ID-jev prilog. Vsebina, ki je obstajala že prej, bo nove možnosti prevajanja prikazala po posodobitvi izvirnika, kot je opisano v zgornjem vodniku WPML.

Z možnostjo --file ukaz ustvari manjkajočo datoteko. V obstoječi datoteki zamenja samo besedilo med <!-- blockstudio:start --> in <!-- blockstudio:end -->, zato drugi razdelki in vnosi za druge bloke ostanejo nespremenjeni:

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>

Če želite uporabiti obstoječo datoteko brez oznak, enkrat dodajte obe vrstici z oznakama znotraj elementa gutenberg-blocks ali dodajte element gutenberg-blocks z oznakama, če ga datoteka še nima. Če oznak ni ali rezultat ni veljavna konfiguracija, ukaz datoteko pusti nespremenjeno in se konča z napako.

Vnosi za bloke Blockstudio, ki so bili zapisani ročno, na primer vnosi translate="0", ki skrijejo tehnične vrednosti, po tem, ko ustvarjeni razdelek pokrije blok, niso več potrebni. Ukaz opozori na vsak blok, ki je deklariran več kot enkrat, zato lahko te vnose odstranite.

Besedila slik v prevajalskih opravilih

WPML doda besedila slik, ki jih uporablja stran, v prevajalsko opravilo strani: naslov, nadomestno besedilo, napis in opis. Ko je opravilo končano, WPML zapiše prevedena besedila v prilogo za ciljni jezik in jo ustvari, če še ne obstaja. Glejte Kako prevajati predstavnost. WPML poišče slike v oznakah <img> v vsebini, galerijah, izpostavljeni sliki in blokih, ki jih pozna. Blok Blockstudio shrani ID-je prilog v komentar bloka, zato jih WPML ne najde.

Ko je WPML aktivna, Blockstudio med najdenimi slikami WPML doda priloge, ki jih shranjujejo polja v blokih strani:

  • Polja files, tudi skrita, in polja attributes z media; gre za ista polja, ki jih urejevalnik blokov naloži kot predstavnost.
  • Polja v skupinah, zavihkih, vrsticah ponavljalnikov in notranjih blokih.
  • Polja razširitev, tudi v jedrnih blokih in blokih drugih vtičnikov, saj so njihove vrednosti shranjene med atributi razširjenega bloka.

Vrednosti, ki niso ID priloge, so izpuščene. Ničesar ni treba nastaviti, filter wpml-config.xml pa ni vključen. Brez WPML se nič ne pregleduje za prevajalska opravila in razred za integracijo predstavnosti se ne naloži.

To je ločeno od pretvorbe ID-jev prilog: ustvarjeni XML pove WPML, katero prevedeno prilogo naj izriše, ta integracija pa mu pove, katera besedila prilog naj vključi v prevajalsko opravilo. Sklici na nize in ID-ji objav, ki niso priloge, niso dodani v opravila za predstavnost. Shranjene vrednosti ugnezdenih polj imajo prednost pred vrednostmi na vrhnji ravni v blokih Blockstudio, enako kot pri izrisu.

Besedila so del opravila le, če je v razdelku z možnostmi besedila slik WPML > Settings > Media Translation omogočena ena od možnosti »Samodejno zaznaj najboljše možnosti za prevajanje besedil slik« ali »Prevajaj besedila predstavnosti v knjižnici predstavnosti pri prevajanju vsebine«, enako kot pri slikah v jedrnih blokih.

Blockstudio poroča o slikah prek filtra wpml_ids_of_media_used_in_post, ki WPML se uporablja za predstavnost objave v PostWithMediaFiles. Če želite sliko izključiti iz opravil, odstranite njen ID v povratnem klicu na istem filtru s prioriteto nad 10:

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