WPML
WPML oversætter kun attributterne i en brugerdefineret blok, hvis sprogkonfigurationsfilen angiver dem. Blockstudio gemmer hver feltværdi i blokkommentaren under blockstudio.attributes, så hver blok skal have en post, der peger WPML på dens tekstfelter og tilknytnings-id’er. wp bs wpml config-kommandoen skriver disse poster for hver registreret blok.
Hvorfor blokke har brug for en konfiguration
WPML læser konfigurationen fra en fil med navnet wpml-config.xml i rodmappen
for det aktive tema og hvert aktivt plugin. For et must-use-plugin, der består
af én fil, har mappen samme navn som filen uden .php. Se
Sprogfiler til konfiguration
og Gør brugerdefinerede Gutenberg blokke oversættelige.
En blok uden en post overlades til WPMLs automatiske strengdetektion, som tilbyder hver strengattribut i blokken til oversættelse. For en Blockstudio-blok, der indeholder select-værdier, filreferencer, URL’er og CSS-klasser. Oversættere ser disse tekniske værdier ved siden af den egentlige tekst, og en oversat select-værdi eller klasse kan ødelægge blokken.
Generér konfigurationen
Udskriv konfigurationen, og gem den i rodmappen for det tema eller plugin, der leverer blokkene:
wp bs wpml config > wp-content/themes/my-theme/wpml-config.xml
Eller lad kommandoen skrive filen:
wp bs wpml config --file=wp-content/themes/my-theme/wpml-config.xml
En blok med et tekstfelt, et billede, et link og en repeater:
{
"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" }
]
}
]
}
}
bliver til:
<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>
Værdien style er ikke deklareret, så WPML kopierer den uændret til
oversættelsen. ID’erne gallery og image kopieres også, og WPML erstatter
hver af dem med den vedhæftning, der hører til sidens sprog, når blokken
vises, så et oversat billede kan have sin egen alt-tekst. Se “Automatisk
konvertering af ID’er i blokke” i
Gør brugerdefinerede Gutenberg blokke oversættelige.
Når en vedhæftning ikke har en oversættelse, beholder WPML det oprindelige ID.
Hvad der deklareres
Kommandoen læser de registrerede blokke, efter at custom/-felter og blokfelter
er blevet udfoldet, og tilsidesættelser og attributfiltre er anvendt. Felter,
som udvidelser føjer til en Blockstudio-blok, medtages. Felter,
som udvidelser føjer til kerneblokke eller blokke fra andre plugins, medtages
ikke, fordi disse blokke får deres konfiguration fra WPML eller deres eget plugin.
| Felt | Deklaration |
|---|---|
text, textarea, richtext, wysiwyg |
Oversættelig tekst. |
link |
title som tekst og url med type="link", så WPML erstatter et link med dets oversættelse, når en sådan er tilgængelig. |
files |
Det gemte vedhæftnings-ID med type="post-ids" og sub-type="attachment". Med multiple et niveau med navnet * for listen, som også matcher det enkelte ID, feltet gemmer, når der er valgt én fil. |
repeater |
Et niveau med navnet *, der matcher hver række, med deklarationerne for rækkens felter. Indlejrede repeatere fungerer på samme måde. |
group med en id |
Gruppens felter med gruppe-ID’et som nøglepræfiks (cta_text for feltet text i gruppen cta). |
group uden en id, tabs |
Felterne uden deres eget niveau. |
Brugerdefineret felttype registreret med translate sat til true |
Oversættelig tekst, ligesom et text-felt. |
| Alle andre indbyggede typer | Ikke deklareret. WPML kopierer værdien uændret. |
En blok uden et deklareret tekstfelt får translate="0". WPML kopierer derefter
alle dens værdier og gør ingen af dem tilgængelige for oversættelse. Dens files–
felter deklareres stadig i posten, fordi WPML konverterer vedhæftnings-ID’er,
uanset hvad translate angiver. Indre blokke oversættes som normalt.
Ikke deklareret:
- Felter med
hidden, fordi deres værdier ikke skrives af redaktører. - Felter med
"translate": false, se nedenfor. - Felter med brugerdefinerede felttyper,
der ikke er registreret med
translatesat tiltrue. Kommandoen udskriver en advarsel for hver af dem, fordi kun felttypen ved, om dens værdi indeholder tekst. En eksplicit"translate": falsepå et felt undertrykker også denne advarsel for det pågældende felt. Se nedenfor. - Attributter, som en blok deklarerer i sin oprindelige
attributesi stedet for som Blockstudio-felter. - Lager-nøgler, hvis felter har forskellige typer, se nedenfor.
Alle tekstfelter deklareres, også felter med tekniske værdier såsom en CSS-klasse, medmindre feltet angiver "translate": false.
Udelad et felt
Et tekstfelt kan indeholde en værdi, der skal være den samme på alle sprog: et
kontonavn, en e-mailadresse, et anker eller en CSS-klasse. WPML gør feltet
tilgængeligt for oversættelse som enhver anden tekst, og en oversat værdi kan
ødelægge blokken. Sæt translate til false for at udelade feltet fra
konfigurationen, så WPML kopierer dets værdi uændret til oversættelsen:
{
"id": "account",
"type": "text",
"label": "Account handle",
"translate": false
}
På en group, tabs eller repeater gælder "translate": false for hvert
felt indeni, også indlejrede beholdere. Et underordnet felt kan ikke tilsidesætte
en udeladt beholder med "translate": true. På et files-felt udelader false også
vedhæftnings-ID’erne, så oversættelsen bevarer de oprindelige vedhæftninger.
Hvis translate udelades eller sættes til true, bevares den eksisterende
adfærd: felttypen bestemmer. Det gør ikke skjulte felter eller værdityper som
select oversættelige. Indstillingen gælder for blok- og udvidelsesfelter,
skjuler eller deaktiverer ikke deres redigeringskontroller og ændrer ikke deres
gemte værdier. Kør wp bs wpml config igen, når indstillingen er ændret, og opdatér
din wpml-config.xml med den genererede konfiguration.
label for hver nøgle er feltetiketten, efterfulgt af etiketterne for de
omgivende repeatere og grupper med et ID. WPML viser den som feltnavn i
oversættelseseditoren. De to nøgler for et link-felt føjer Link text og
URL til etiketten. Disse suffikser oversættes til webstedets sprog, så
kør kommandoen med det sprog, dine oversættere arbejder på.
Brugerdefinerede felttyper
En felttype, der gemmer en almindelig tekststreng, angiver dette ved
registreringen. Sæt translate til true i definitionen, hvilket kræver, at
attribute er string:
bs_register_field_type('acme/headline', [
'attribute' => 'string',
'translate' => true,
]);
Kommandoen erklærer derefter alle felter af den pågældende type som tekst, der skal oversættes. Et felt kan stadig indstille "translate": false til at blive udeladt. Uden indstillingen udelades felterne af typen og rapporteres som før.
Skift etiketterne
Feltetiketter er skrevet til blokeditoren og kan indeholde hints som “Image (optional)”, der ikke giver mening i oversættelseseditoren. Filteret blockstudio/wpml/config/label modtager hver etiket, før den skrives, sammen med konteksten for nøglen:
block: bloknavnet.path: feltets lagersti underblockstudio.attributes, med et niveau*for rækkerne i hver gentager, for eksempelcards/*/link.field: feltdefinitionen.parents: etiketterne for de omgivende gentagere og grupper med et ID.part:textfor et tekstfelt,titleellerurlfor de to nøgler i et linkfelt.
add_filter('blockstudio/wpml/config/label', function ($label, $context) {
return str_replace(' (optional)', '', $label);
}, 10, 2);
Returnér en tom streng for at udelade etiketten for en nøgle, så WPML i stedet viser blokkens etiket. En returværdi, der ikke er en streng, bevarer den oprindelige etiket. Kør kommandoen igen, når du har ændret filteret.
Felter med samme lagernøgle
To felter kan ende med samme lagernøgle, for eksempel et blokfelt og et udvidelsesfelt med samme id, eller feltet text i en gruppe med ID’et cta og et felt med ID’et cta_text. Kommandoen erklærer kun en sådan nøgle, når det er klart, hvad der gemmes dér:
- Blandt blokkens felter uden for gentagerrækker registrerer Blockstudio én attribut pr. lagernøgle, så et senere felt erstatter et tidligere, uanset type. Felterne i blokkens udvidelser fungerer på samme måde: Et senere felt eller et felt fra en senere registreret udvidelse erstatter et tidligere.
- Et blokfelt og et udvidelsesfelt med samme nøgle er begge aktive. Blokskabelonen modtager værdien, som defineret af blokkens felt, mens udvidelsen anvendes med sit eget felt. Nøglen erklæres én gang, når begge felter kræver samme erklæring: Begge er tekstfelter (
text,textarea,richtextellerwysiwyg), begge er links, begge er felter af typenfiles(medmultiplepå en af dem får nøglen niveauet*), eller ingen af dem erklæres, f.eks. etselectog etnumber. To gentagere sammenlignes felt for felt i deres rækker. Etiketten kommer fra blokkens felt. - To felter med samme
idi rækkerne i én gentager forbliver også begge aktive og sammenlignes på samme måde.
Når typerne er forskellige, f.eks. et text-felt i blokken og et select i en udvidelse, er den gemte værdi tekst eller en valgmulighed afhængigt af den kontrol, der skrev den. Kommandoen erklærer ikke nøglen og viser en advarsel:
Warning: Not declared, the fields that store this key have different types: my-theme/cards: tone (text in the block, select in an extension)
Omdøb et af felterne, eller giv dem begge samme type, så nøglen bliver erklæret.
Hold konfigurationen opdateret
Kør kommandoen igen, når du tilføjer, fjerner eller omdøber felter, og medtag den opdaterede fil i temaet eller pluginnet. Generér konfigurationer, der er lavet før 7.7.5, igen for at medtage erklæringer for vedhæftnings-ID’er. Indhold, der fandtes i forvejen, viser nye felter til oversættelse, når dets original opdateres, som beskrevet i guiden WPML ovenfor.
Med --file opretter kommandoen en manglende fil. I en eksisterende fil erstatter den kun teksten mellem <!-- blockstudio:start --> og <!-- blockstudio:end -->, så andre sektioner og poster for andre blokke forbliver uændrede:
<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>
Hvis du vil bruge en eksisterende fil uden markører, skal du tilføje de to markeringslinjer én gang i dens gutenberg-blocks-element eller tilføje et gutenberg-blocks-element med markørerne, hvis filen ikke har et. Uden markørerne, eller hvis resultatet ikke ville være en gyldig konfiguration, lader kommandoen filen være uændret og afslutter med en fejl.
Poster for Blockstudio-blokke, der er skrevet manuelt, f.eks. poster af typen translate="0", som skjuler tekniske værdier, er ikke længere nødvendige, når den genererede sektion dækker blokken. Kommandoen advarer om hver blok, der er erklæret mere end én gang, så disse poster kan fjernes.
Billedtekster i oversættelsesjob
WPML føjer teksterne fra de billeder, en side bruger, til sidens oversættelsesjob: titel, alt-tekst, billedtekst og beskrivelse. Når jobbet er fuldført, skriver WPML de oversatte tekster til vedhæftningen på målsproget og opretter vedhæftningen, hvis den ikke allerede findes. Se Sådan oversætter du medier.
WPML finder billederne i <img>-tags i indholdet, i gallerier, i det fremhævede billede og i de blokke, den kender. En Blockstudio-blok gemmer vedhæftnings-ID’er i blokkens kommentar, så WPML finder ingen af dem.
Når WPML er aktiv, føjer Blockstudio de vedhæftninger, som dens felter gemmer i en sides blokke, til de billeder, der findes med WPML:
files-felter, herunder skjulte, ogattributes-felter medmedia, de samme felter, som blokeditoren indlæser som medier.- Felter i grupper, faner, gentagerrækker og indre blokke.
- Felter i udvidelser, også på kerneblokke og blokke fra andre plugins, fordi deres værdier gemmes i attributterne for den udvidede blok.
Værdier, der ikke er ID’er for en vedhæftning, udelades. Der er ikke noget, der skal konfigureres, og wpml-config.xml er ikke involveret. Uden WPML scannes intet til oversættelsesjob, og medieintegrationsklassen indlæses ikke.
Dette er adskilt fra konvertering af vedhæftnings-ID’er: Den genererede XML fortæller WPML, hvilken oversat vedhæftning der skal vises, mens denne integration fortæller den, hvilke vedhæftningstekster der skal med i et oversættelsesjob. Strengreferencer og ID’er for indlæg, der ikke er vedhæftninger, føjes ikke til mediejob. Gemte indlejrede feltværdier har forrang frem for værdier på øverste niveau i Blockstudio-blokke, som ved visning.
Teksterne indgår kun i jobbet, når en af billedtekstindstillingerne under WPML > Settings > Media Translation er aktiveret: “Automatically detect best options for translating image texts” eller “Translate Media Library texts when translating content”, ligesom for billeder i kerneblokke.
Blockstudio rapporterer billederne via filteret
wpml_ids_of_media_used_in_post, som WPML anvendes på et indlægs medier i
PostWithMediaFiles. Hvis et billede skal udelades fra opgaverne, skal du fjerne dets ID i et
callback på det samme filter med en prioritet over 10:
add_filter(
'wpml_ids_of_media_used_in_post',
function ( $ids ) {
return array_values( array_diff( $ids, array( 42 ) ) );
},
20
);