
# 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](https://wpml.org/documentation/support/language-configuration-files/)
in [Poskrbite, da bodo bloki Gutenberg prevedljivi](https://wpml.org/documentation/support/language-configuration-files/make-custom-gutenberg-blocks-translatable/).

Č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:

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

Ali pa pustite, da ukaz zapiše datoteko:

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

Blok z besedilnim poljem, sliko, povezavo in ponavljalnikom:

```json title="block.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 title="wpml-config.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](https://wpml.org/documentation/support/language-configuration-files/make-custom-gutenberg-blocks-translatable/).
Č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](https://blockstudio.dev/sl/docs/extensions/) 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](https://blockstudio.dev/sl/docs/blocks/attributes/custom-field-types/), 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 title="block.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 title="functions.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 title="functions.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:

```bash
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 title="wpml-config.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](https://wpml.org/documentation/translating-your-contents/media/).
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](https://blockstudio.dev/sl/docs/extensions/), 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
);
```
