
# WPML

WPML tulko pielāgota bloka atribūtus tikai tādā apmērā, kādu nosaka valodas konfigurācijas fails. Blockstudio saglabā katra lauka vērtību bloka komentārā zem `blockstudio.attributes`, tāpēc katram blokam nepieciešams ieraksts, kas norāda WPML uz tā teksta laukiem un pielikumu ID. Komanda `wp bs wpml config` ieraksta šos datus katram reģistrētajam blokam.

## Kāpēc blokiem nepieciešama konfigurācija

WPML nolasa konfigurāciju no faila ar nosaukumu `wpml-config.xml` aktīvās tēmas un katra aktīvā spraudņa saknes mapē. Viena faila obligāti ielādējamam spraudnim mapes nosaukums ir faila nosaukums bez `.php`. Skatiet [Valodas konfigurācijas faili](https://wpml.org/documentation/support/language-configuration-files/) un [Padariet pielāgotos Gutenberg blokus tulkojamus](https://wpml.org/documentation/support/language-configuration-files/make-custom-gutenberg-blocks-translatable/).

Bloks bez ieraksta tiek nodots automātiskai virkņu noteikšanai, ko veic WPML, un tulkošanai tiek piedāvāta ikviena bloka virknes atribūta vērtība. Blokam Blockstudio tas ietver atlasāmās vērtības, failu atsauces, URL un CSS klases. Tulkotāji līdzās īstajam tekstam redz šīs tehniskās vērtības, un iztulkota atlasāmā vērtība vai klase var sabojāt bloku.

## Ģenerējiet konfigurāciju

Izdrukājiet konfigurāciju un saglabājiet to tās tēmas vai spraudņa saknes mapē, kurā iekļauti bloki:

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

Vai ļaujiet komandai ierakstīt failu:

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

Bloks ar teksta lauku, attēlu, saiti un atkārtotāju:

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

kļūst par:

```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>
```

Vērtība `style` nav deklarēta, tāpēc WPML to iekopē tulkojumā bez izmaiņām. Tiek iekopēti arī ID `gallery` un `image`, un, renderējot bloku, WPML katru no tiem aizstāj ar lapas valodas pielikumu, tādēļ tulkotajam attēlam var būt savs alternatīvais teksts. Skatiet sadaļu “Automātiska ID konvertēšana blokos” rakstā [Padariet pielāgotos Gutenberg blokus tulkojamus](https://wpml.org/documentation/support/language-configuration-files/make-custom-gutenberg-blocks-translatable/). Ja pielikumam nav tulkojuma, WPML saglabā sākotnējo ID.

## Kas tiek deklarēts

Komanda nolasa reģistrētos blokus pēc tam, kad ir izvērsti `custom/` lauki un bloku lauki un piemēroti aizvietojumi un atribūtu filtri. Tiek iekļauti lauki, ko [paplašinājumi](https://blockstudio.dev/lv/docs/extensions/) pievieno Blockstudio blokam. Lauki, ko paplašinājumi pievieno kodola blokiem vai citu spraudņu blokiem, netiek iekļauti, jo šie bloki konfigurāciju saņem no WPML vai sava spraudņa.

| Lauks | Deklarācija |
| --- | --- |
| `text`, `textarea`, `richtext`, `wysiwyg` | Tulkojams teksts. |
| `link` | `title` kā teksts un `url` ar `type="link"`, tāpēc WPML aizstāj saiti ar tās tulkojumu, ja tāds ir pieejams. |
| `files` | Saglabātais pielikuma ID ar `type="post-ids"` un `sub-type="attachment"`. Ar `multiple` — līmenis ar nosaukumu `*` sarakstam, kas atbilst arī vienam ID, kuru lauks saglabā, ja atlasīts viens fails. |
| `repeater` | Līmenis ar nosaukumu `*`, kas atbilst katrai rindai un kurā ir rindu lauku deklarācijas. Iekļauti atkārtotāji darbojas tāpat. |
| `group` ar `id` | Grupas lauki, izmantojot grupas ID kā atslēgas prefiksu (`cta_text` laukam `text` grupā `cta`). |
| `group` bez `id`, `tabs` | Lauki bez sava līmeņa. |
| Pielāgots lauka tips, kas reģistrēts ar `translate` iestatītu uz `true` | Tulkojams teksts, tāpat kā laukam `text`. |
| Visi pārējie iebūvētie tipi | Nav deklarēti. WPML kopē vērtību bez izmaiņām. |

Blokam bez deklarēta teksta lauka tiek piešķirta `translate="0"`. Pēc tam WPML iekopē visas tā vērtības, un tulkošanai nekas netiek piedāvāts. Tā `files` lauki joprojām tiek deklarēti ierakstā, jo WPML konvertē pielikumu ID neatkarīgi no tā, ko nosaka `translate`. Iekšējie bloki tiek tulkoti kā parasti.

Nav deklarēti:

- Lauki ar `hidden`, jo redaktori to vērtības neieraksta.
- Lauki ar `"translate": false`; skatiet tālāk.
- Lauki ar [pielāgotiem lauku tipiem](https://blockstudio.dev/lv/docs/blocks/attributes/custom-field-types/), kas nav reģistrēti ar `translate` iestatītu uz `true`. Komanda katram no tiem izvada brīdinājumu, jo tikai lauka tips zina, vai tā vērtība satur tekstu. Skaidri norādīts `"translate": false` laukā arī novērš šī brīdinājuma rādīšanu par attiecīgo lauku. Skatiet tālāk.
- Atribūti, ko bloks deklarē savā dabiskajā `attributes`, nevis kā Blockstudio laukus.
- Krātuves atslēgas, kuru laukiem ir dažādi tipi; skatiet tālāk.

Tiek deklarēts ikviens teksta lauks, tostarp tāds, kurā ir tehniska vērtība, piemēram, CSS klase, ja vien tam nav iestatīts `"translate": false`.

### Neiekļaut lauku

Teksta laukā var būt vērtība, kurai visās valodās jāpaliek nemainīgai: konta lietotājvārds, e-pasta adrese, enkurs vai CSS klase. WPML piedāvā šo vērtību tulkošanai tāpat kā jebkuru citu tekstu, un iztulkota vērtība var sabojāt bloku. Iestatiet `translate` uz `false`, lai lauku izlaistu konfigurācijā un WPML iekopētu tā vērtību tulkojumā bez izmaiņām:

```json title="block.json"
{
  "id": "account",
  "type": "text",
  "label": "Account handle",
  "translate": false
}
```

Blokam `group`, `tabs` vai `repeater` `"translate": false` attiecas uz visiem iekšējiem laukiem, tostarp ligzdotajiem konteineriem. Pakārtots elements nevar atcelt izvēli izlaist konteineru, izmantojot `"translate": true`. Laukam `files` `false` izlaiž arī pielikumu ID, tāpēc tulkojumā tiek saglabāti sākotnējie pielikumi.

Ja `translate` nav norādīts vai ir iestatīts uz `true`, tiek saglabāta esošā darbība: lēmumu pieņem lauka tips. Tas nepadara slēptos laukus vai tādus vērtību tipus kā `select` tulkojamus. Šī opcija attiecas uz bloku un paplašinājumu laukiem, neslēpj un neatspējo to redaktora vadīklas un nemaina saglabātās vērtības. Pēc iestatījuma maiņas vēlreiz palaidiet `wp bs wpml config` un atjauniniet savu `wpml-config.xml` ar ģenerēto konfigurāciju.

Katras atslēgas `label` ir lauka etiķete, pirms kuras ir ietverošo atkārtotāju un grupu ar ID etiķetes. WPML parāda to kā lauka nosaukumu tulkošanas redaktorā. Abas atslēgas laukam `link` pievieno etiķetei `Link text` un `URL`. Šie sufiksi tiek tulkoti vietnes valodā, tāpēc palaidiet komandu tulkotājiem paredzētajā valodā.

### Pielāgoti lauku tipi

Lauka tips, kurā tiek saglabāta vienkārša teksta virkne, par to paziņo reģistrācijas laikā. Definīcijā iestatiet `translate` uz `true`; šim nolūkam `attribute` jābūt `string`:

```php title="functions.php"
bs_register_field_type('acme/headline', [
  'attribute' => 'string',
  'translate' => true,
]);
```

Komanda pēc tam deklarē visus šī tipa laukus kā tulkojamu tekstu. Laukam joprojām var iestatīt `"translate": false`, lai to izlaistu. Ja šī opcija nav norādīta, tipa lauki tiek izlaisti un par tiem tiek ziņots tāpat kā iepriekš.

### Mainiet etiķetes

Lauku etiķetes ir paredzētas bloku redaktoram, un tajās var būt norādes, piemēram, "Image (optional)", kas tulkošanas redaktorā neko nenozīmē. `blockstudio/wpml/config/label` filtrs saņem katru etiķeti pirms tās ierakstīšanas kopā ar atslēgas kontekstu:

- `block`: bloka nosaukums.
- `path`: lauka glabāšanas ceļš zem `blockstudio.attributes`, ar līmeni `*` katra atkārtotāja rindām, piemēram, `cards/*/link`.
- `field`: lauka definīcija.
- `parents`: ietverošo atkārtotāju un grupu etiķetes ar ID.
- `part`: `text` teksta laukam, `title` vai `url` abām saites lauka atslēgām.

```php title="functions.php"
add_filter('blockstudio/wpml/config/label', function ($label, $context) {
  return str_replace(' (optional)', '', $label);
}, 10, 2);
```

Atgrieziet tukšu virkni, lai izlaistu atslēgas etiķeti; tad WPML vietā tiek rādīta bloka etiķete. Ja atgrieztā vērtība nav virkne, tiek saglabāta sākotnējā etiķete. Pēc filtra maiņas palaidiet komandu vēlreiz.

### Lauki ar vienādu glabāšanas atslēgu

Diviem laukiem var būt viena un tā pati glabāšanas atslēga, piemēram, bloka laukam un paplašinājuma laukam ar vienādu `id` vai laukam `text` grupā ar ID `cta` un laukam ar ID `cta_text`. Komanda deklarē šādu atslēgu tikai tad, ja ir skaidrs, kas tajā tiek glabāts:

- Bloka laukos ārpus atkārtotāja rindām Blockstudio reģistrē vienu atribūtu katrai glabāšanas atslēgai, tāpēc vēlāks lauks aizstāj agrāku neatkarīgi no tā tipa. Bloka paplašinājumu lauki darbojas tāpat: vēlāks lauks vai vēlāk reģistrēta paplašinājuma lauks aizstāj agrāku.
- Bloka lauks un paplašinājuma lauks ar vienādu atslēgu abi paliek spēkā. Bloka veidne saņem vērtību, kā to definē bloka lauks, savukārt paplašinājums tiek lietots ar savu lauku. Atslēga tiek deklarēta vienreiz, ja abiem laukiem nepieciešama viena un tā pati deklarācija: abi ir teksta lauki (`text`, `textarea`, `richtext` vai `wysiwyg`), abi ir saites, abi ir `files` lauki (ja kādam no tiem ir `multiple`, atslēka iegūst līmeni `*`) vai neviens nav deklarēts, piemēram, `select` un `number`. Divus atkārtotājus salīdzina pa laukiem to rindās. Etiķete tiek ņemta no bloka lauka.
- Arī divi lauki ar vienādu `id` viena atkārtotāja rindās paliek spēkā un tiek salīdzināti tāpat.

Ja tipi atšķiras, piemēram, bloka lauks `text` un paplašinājuma lauks `select`, saglabātā vērtība ir teksts vai atlases opcija atkarībā no vadīklas, kas to ierakstīja. Komanda šo atslēgu nedeklarē un parāda brīdinājumu:

```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)
```

Pārdēvējiet vienu no laukiem vai piešķiriet abiem vienādu tipu, lai atslēga tiktu deklarēta.

## Uzturiet konfigurāciju aktuālu

Pēc lauku pievienošanas, noņemšanas vai pārdēvēšanas palaidiet komandu vēlreiz un iekļaujiet atjaunināto failu tēmā vai spraudnī. Ģenerējiet no jauna konfigurācijas, kas izveidotas pirms 7.7.5, lai tajās iekļautu pielikumu ID deklarācijas. Esošajā saturā jaunie lauki kļūst pieejami tulkošanai pēc sākotnējā satura atjaunināšanas, kā aprakstīts iepriekš sniegtajā WPML ceļvedī.

Izmantojot `--file`, komanda izveido trūkstošu failu. Esošā failā tā aizstāj tikai tekstu starp `<!-- blockstudio:start -->` un `<!-- blockstudio:end -->`, tāpēc pārējās sadaļas un citu bloku ieraksti paliek nemainīti:

```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>
```

Lai izmantotu esošu failu, kurā vēl nav marķieru, vienreiz pievienojiet abas marķieru rindas tā `gutenberg-blocks` elementā vai pievienojiet `gutenberg-blocks` elementu ar marķieriem, ja failā tāda nav. Ja marķieru nav vai rezultāts nebūtu derīga konfigurācija, komanda failu nemaina un beidzas ar kļūdu.

Ar roku rakstīti ieraksti blokiem Blockstudio, piemēram, `translate="0"` ieraksti, kas slēpj tehniskās vērtības, vairs nav vajadzīgi, kad ģenerētā sadaļa aptver šo bloku. Komanda brīdina par katru bloku, kas deklarēts vairāk nekā vienu reizi, lai šos ierakstus varētu noņemt.

## Attēlu teksti tulkošanas uzdevumos

WPML iekļauj tulkošanas uzdevumā attēlu tekstus no lapā izmantotajiem attēliem: nosaukumu, alternatīvo tekstu, parakstu un aprakstu. Kad uzdevums ir pabeigts, WPML ieraksta tulkotos tekstus mērķa valodas pielikumā un izveido šo pielikumu, ja tāda vēl nav. Skatiet [Kā tulkot multividi](https://wpml.org/documentation/translating-your-contents/media/).
WPML atrod attēlus satura `<img>` tagos, galerijās, izceltajā attēlā un tam zināmajos blokos. Blokā Blockstudio pielikumu ID tiek glabāti bloka komentārā, tāpēc WPML tos neatrod.

Ja WPML ir aktīvs, Blockstudio pievieno attēlu sarakstam pielikumus, kuru vērtības glabājas lapas bloku laukos un kurus WPML ir atradis:

- `files` lauki, tostarp slēptie, un `attributes` lauki ar `media` — tie paši lauki, kurus bloku redaktors ielādē kā multividi.
- Lauki grupās, cilnēs, atkārtotāja rindās un iekšējos blokos.
- [paplašinājumu](https://blockstudio.dev/lv/docs/extensions/) lauki, arī pamata blokos un citu spraudņu blokos, jo to vērtības tiek glabātas paplašinātā bloka atribūtos.

Vērtības, kas nav pielikuma ID, tiek izlaistas. Nekas nav jākonfigurē, un `wpml-config.xml` netiek izmantots. Ja WPML nav ieslēgts, tulkošanas uzdevumos nekas netiek skenēts un multivides integrācijas klase netiek ielādēta.

Tas ir atsevišķi no pielikumu ID konvertēšanas: ģenerētais XML norāda WPML, kuru tulkoto pielikumu attēlot, savukārt šī integrācija norāda, kurus pielikumu tekstus iekļaut tulkošanas uzdevumā. Virkņu atsauces un tādu ierakstu ID, kas nav pielikumi, multivides uzdevumiem netiek pievienoti. Saglabātās ligzdoto lauku vērtības ir prioritāras pār augšējā līmeņa vērtībām Blockstudio blokos, tāpat kā attēlošanas laikā.

Teksti tiek iekļauti uzdevumā tikai tad, ja ir iespējota kāda no attēlu teksta opcijām sadaļā WPML > Settings > Media Translation: "Automatically detect best options for translating image texts" vai "Translate Media Library texts when translating content", tāpat kā pamata blokos izmantotajiem attēliem.

Blockstudio attēlus atgriež caur filtru `wpml_ids_of_media_used_in_post`, kas WPML attiecas uz ieraksta multivides datiem vietnē `PostWithMediaFiles`. Lai attēlu izslēgtu no uzdevumiem, noņemiet tā ID atzvanā tajā pašā filtrā ar prioritāti, kas lielāka par 10:

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