# Sztringcsomagok készítése

> Hogyan hozhatsz létre sztringcsomagokat témádhoz vagy bővítményedhez, hogy a felhasználók több sztringet együtt, automatikus fordítással fordíthassanak.

A sztringcsomagok egy adott környezetbe „összecsomagolt” sztringek csoportjai. Céljuk, hogy a felhasználók gyorsabban fordíthassanak, mert nem kell minden sztringet külön lefordítaniuk.

Például így fordítanák a felhasználók az egyedi felhasználói mezőket sztringcsomaggal és nélküle:

- **Sztringcsomag nélkül:** a négy mező külön sztringként jelenik meg a **WPML → Fordítások → Strings** oldalon. A felhasználóknak egyenként kell lefordítaniuk őket, automatikus fordítás nélkül.
- **Sztringcsomaggal:** ugyanaz a négy mező egy csomagként jelenik meg a Fordítások irányítópultján. A felhasználók egyszerre fordíthatják le a több sztringet, automatikus fordítási lehetőséggel.

A legjobb fordítási élményhez készíts saját sztringcsomagokat az alábbi lépésekkel. A példák egy `otgs-foo-user-fields` nevű tesztbővítményből valók.

## 1. A fordítandó tartalom azonosítása

Először azonosítsd azt a tartalmat, amelyet a felhasználók fordítani akarnak, például címeket, feliratokat és felhasználók által létrehozott tartalmat.

## 2. A csomag fajtájának deklarálása

Deklarálnod kell a csomag fajtáját (package kind). Ez segít a WPML-nek felismerni, mely sztringcsomagok tartoznak az aktív bővítményekhez, és csak azokat fordítja. A szűrő a sztringcsomagoknál úgy működik, ahogy a `register_post_types` szűrő a bejegyzéstípusoknál.

A fajta deklarálásához használd a `wpml_active_string_package_kinds` szűrőt:

```php
define( 'FOO_USER_FIELD_PACKAGE_KIND_TITLE', 'OTGS Foo User Fields' );

define( 'FOO_USER_FIELD_PACKAGE_KIND_SLUG', 'otgs-foo-user-fields' );

add_filter( 'wpml_active_string_package_kinds', function( $kinds ) {

    $kinds[ FOO_USER_FIELD_PACKAGE_KIND_SLUG ] = [
        'title'  => FOO_USER_FIELD_PACKAGE_KIND_TITLE,
        'slug'   => FOO_USER_FIELD_PACKAGE_KIND_SLUG,
        'plural' => FOO_USER_FIELD_PACKAGE_KIND_TITLE,
    ];

    return $kinds;

} );
```

| Paraméter | Jelentése |
|---|---|
| `title` | A fajta címe, egyezzen a csomagok `kind` értékével. |
| `plural` | A cím többes száma. |
| `slug` | A fajta slugja, egyezzen a csomagok `kind_slug` értékével. |

## 3. Csomag létrehozása és sztringek regisztrálása

Hozd létre a csomagot, és a `wpml_register_string` horoggal regisztráld a benne csoportosított sztringeket:

```php
$userId = 123;

$user   = get_user_by( 'id', $userId );

$package = [
    'kind'      => FOO_USER_FIELD_PACKAGE_KIND_TITLE, // A „névtér”.
    'kind_slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG,  // A „névtér” slugja.
    'name'      => $userId, // Szöveg vagy szám, de egyedi legyen a „kind” névtéren belül.
    'title'     => $user->display_name, // A csomag entitásának címe a „kind” névtéren belül.
];

$fooUserFields = get_option( 'otgs_foo_user_fields' );

foreach ( $fooUserFields as $fooUserField ) {

    $fieldValue = get_user_meta( $userId, $fooUserField, true );

    do_action( 'wpml_register_string', $fieldValue, sanitize_key( $fooUserField ), $package, $fooUserField, 'LINE' );

}
```

A csomag paraméterei:

| Paraméter | Jelentése |
|---|---|
| `kind` | Az entitás névterének felirata (például „Gravity Form”). |
| `kind_slug` | A névtér slugja (például `gravity-form`). Ha hiányzik, a `kind` slugolt változata lesz. |
| `name` | Az entitás egyedi azonosítója a fajtán belül, lehet szöveg (például slug) vagy szám (például azonosító). |
| `title` | Az entitás címe a fajtán belül. Érdemes a valódi entitás címét használni. |
| `edit_link` | Nem kötelező: az objektum szerkesztésének URL-je. |
| `view_link` | Nem kötelező: az objektum megtekintésének URL-je. |

## 4. A fordítások lekérése

A fordítások frontenden való megjelenítéséhez a `wpml_translate_string` horgot használd:

```php
$userId = 123;

$user   = get_user_by( 'id', $userId );

$package = [
    'kind'      => FOO_USER_FIELD_PACKAGE_KIND_TITLE,
    'kind_slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG,
    'name'      => $userId,
    'title'     => $user->display_name,
];

$fooUserFields = get_option( 'otgs_foo_user_fields' );

$translatedFieldValues = [];

foreach ( $fooUserFields as $fooUserField ) {

    $fieldValue = get_user_meta( $userId, $fooUserField, true );

    $translatedFieldValues[ $fooUserField ] = apply_filters( 'wpml_translate_string', $fieldValue, sanitize_key( $fooUserField ), $package );

}
```

## Sztringek frissítése és törlése

Amikor a felhasználók módosítják a tartalmat, a WPML-nek fel kell ismernie az új és az eltávolított sztringeket. Hogy értesítsd a változásokról, fogd közre a regisztráló kódot két függvénnyel:

- `wpml_start_string_package_registration`
- `wpml_delete_unused_package_strings`

```php
$userId = 123;

$package = [
    'kind'      => FOO_USER_FIELD_PACKAGE_KIND_TITLE,
    'kind_slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG,
    'name'      => $userId,
    // A „title” kulcs a „translate” környezetben nem kötelező.
];

do_action( 'wpml_start_string_package_registration', $package );

$fooUserFields = get_option( 'otgs_foo_user_fields' );

foreach ( $fooUserFields as $fooUserField ) {

    $fieldValue = get_user_meta( $userId, $fooUserField, true );

    do_action( 'wpml_register_string', $fieldValue, sanitize_key( $fooUserField ), $package, $fooUserField, 'LINE' );

}

do_action( 'wpml_delete_unused_package_strings', $package );
```

## Sztringcsomagok törlése

Amikor a felhasználók eltávolítanak egy tartalmat, a hozzá tartozó sztringcsomagot is töröld, az összes kapcsolódó sztringgel, fordítással és feladattal együtt. Így nem marad felesleges adat az adatbázisban.

A törléshez a bővítményed vagy témád egy megfelelő akciójába akaszd be a `wpml_delete_package` hívást:

```php
$userId = 123;

do_action( 'wpml_delete_package', $userId, FOO_USER_FIELD_PACKAGE_KIND_SLUG );
```

## Kapcsolódó fejezetek

- [A nyelvi konfigurációs fájl](https://hub.hellowp.io/hu/plugins/sitepress-multilingual-cms/fejleszto-wpml-config/): a `wpml-config.xml` használata.
- [Multilingual Tools](https://hub.hellowp.io/hu/plugins/sitepress-multilingual-cms/fejleszto-multilingual-tools/): a beállítás tesztelése és a kompatibilitás ellenőrzése.
