Tovább a tartalomhoz

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

Szekció neve “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.

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:

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

Szekció neve “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:

$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.

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

$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 );
}

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
$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 );

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:

$userId = 123;
do_action( 'wpml_delete_package', $userId, FOO_USER_FIELD_PACKAGE_KIND_SLUG );

Készült:

Tiszteletben tartjuk a magánszférádat

Sütiket használunk a böngészési élmény javítására és a forgalom elemzésére. Az analitika csak akkor indul, ha engeded. Adatvédelmi irányelvek, Sütitájékoztató.

Sütibeállítások