Tovább a tartalomhoz

Várt viselkedések, amelyek hibának tűnhetnek

Amit a WPML szándékosan így csinál: has_category(), dátum utótagok, slug, kivonat, domainek, importált fordítások, sztringek nyelve.

Néhány dolog többnyelvű webhelyen tervezetten másképp működik: egy WordPress-függvény, amely az alapértelmezett nyelv kifejezésére épül, egy dátum-utótag, amelyet a WordPress nem tud lokalizálni, vagy egy slug, amelyet az Advanced Translation Editor nem talál ki. Ezek nem hibák. Az alábbiakban azt találod, mi történik, miért, és mit tegyél helyette.

has_category() és más feltételes függvények fordított bejegyzéseknél

Szekció neve “has_category() és más feltételes függvények fordított bejegyzéseknél”

A WordPress has_category() függvényét a WPML szándékosan nem szűri. Fordításnál a kategória a lefordított kifejezés, amelynek saját slugja van, ezért a has_category('news') hamis a francia bejegyzésen, még ha az a francia „news” kategóriában is van. Ugyanez igaz a has_term(), az in_category() és minden olyan kódra, amely az alapértelmezett nyelv slugját vagy azonosítóját hasonlítja.

Mit látsz. Van egy kategóriád test angol slugal és test-fr francia fordítással, amelyet bejegyzésekhez rendeltél. Ha a témád single.php fájljában egy cikluson belül meghívod a has_category("test") függvényt, az igazat ad az alapértelmezett nyelven, és hamisat a fordításon.

Mit tegyél. Hívd a feltételes függvényt a lefordított slugal, vagy előbb a wpml_object_id szűrővel kérd le a kifejezés azonosítóját. Vagy definiálj új szűrőt a téma functions.php fájljában:

function wp_has_category ($category) {
$category = get_term_by('name', $category, 'category');
return has_category($category);
}
add_filter('wp_has_category', 'wp_has_category', 10, 1);

A has_category hívását cseréld erre:

apply_filters( 'wp_has_category', 'test' )

A szűrő az eredeti kategória neve alapján megkeresi a lefordított kategóriát, és ellenőrzi, hogy hozzá van-e rendelve a bejegyzéshez.

A dátum-utótagok (1st, 2nd, 3rd) nem fordíthatók

Szekció neve “A dátum-utótagok (1st, 2nd, 3rd) nem fordíthatók”

Ez a WordPress magjának korlátja, nem a WPML-é: az utótag a PHP dátumformázásából jön, és sosem megy át fordítófüggvényen.

Mit látsz. Egyes témák és bővítmények a wp_date() vagy date_i18n() függvénnyel írják ki a dátumot, amely a paraméterektől függően utótagot használ (1st, 26th). Ezeket a WordPress magjának régi, ismert korlátja miatt jelenleg nem lehet lefordítani.

Mit tegyél. Megkerülő megoldásként a wp_date szűrővel lekérheted a dátumot, és a megjelenítés előtt módosíthatod az utótagot. Előtte készíts teljes biztonsági mentést az oldalról.

  1. Adj a téma functions.php fájljához egy kis wp_date szűrőt, amely minden utótagot sztringként regisztrál (icl_register_string), és az angol utótag helyett a fordítását adja vissza (icl_t).
  2. Nyisd meg az oldalt, ahol a dátumok megjelennek: ezzel lefut a szűrő.
  3. A WPML → String Translation oldalon fordítsd le a dátumokat.

Minden utótagot külön kell lefordítani (1st, 2nd …), mert nyelvenként eltérhet.

Az Advanced Translation Editor nem talál ki slugot

Szekció neve “Az Advanced Translation Editor nem talál ki slugot”

A szerkesztő akkor fordítja le a slug mezőt, ha kitöltöd, és megtartja az eredeti slugot, ha üresen hagyod. A lefordított címből sosem képez slugot magától.

Mit látsz. Ha az Advanced Translation Editorban fordítasz egy bejegyzést, a slug mező nem töltődik ki automatikusan. Ha üresen hagyod, a lefordított bejegyzés az eredeti nyelv slugját kapja.

Oldalépítő shortcode-ok a WooCommerce termék rövid leírásában

Szekció neve “Oldalépítő shortcode-ok a WooCommerce termék rövid leírásában”

A rövid leírás a bejegyzés kivonata, amely a WordPress meghatározása szerint egyszerű szöveges mező, ezért a WPML nem dolgozza fel benne az oldalépítők shortcode-jait úgy, mint a tartalomban. A WooCommerce viszont megjeleníti őket, ezért a különbség meglepi az embereket.

Mit látsz. A WooCommerce termék rövid leírása a kivonat mezőre épül, amely általában egyszerű szöveges mező, nem kezel shortcode-ot. A WooCommerce másképp kezeli ezeket a „kivonatokat”, és a shortcode-ok működnek, de a WPML úgy viselkedik, mintha nem működnének. Ha a shortcode fordítandó attribútumokat vagy automatikusan kezelendő belső hivatkozásokat tartalmaz, ez nem megy magától.

Mit tegyél. Van egy kód, amelyet bővítményként telepíthetsz. Másold egy wpmlpb-excerpts.php nevű fájlba a wp-content/plugins/ mappában, és aktiváld a bővítményt:

<?php
/**
* Plugin Name: WPML Page Builders - Proces Excerpts
* Description: Parses shortcode strings in exceprts.
* Version: 1.0
*/
namespace WPMLPB686;
( new Excerpts() )->add_hooks();
class Excerpts {
const SEPARATOR_START = '<!--WPML_EXCERPT_START-->';
const SEPARATOR_END = '<!--WPML_EXCERPT_END-->';
public function add_hooks() {
add_filter( 'wpml_pb_shortcode_content_for_translation', [ $this, 'joinWithContent' ], 10, 2 );
add_filter( 'wpml_tm_translation_job_data', [ $this, 'excludeFromJob' ], 10, 2 );
add_action( 'wpml_pro_translation_completed', [ $this, 'splitFromContent' ], 999 );
}
public function joinWithContent( $content, $id ) {
$post = get_post( $id );
if ( $post && $post->post_excerpt ) {
$content .= self::SEPARATOR_START . $post->post_excerpt . self::SEPARATOR_END;
}
return $content;
}
public function excludeFromJob( $package, $post ) {
if ( preg_match( '/[[^]]+]/', $post->post_excerpt ) ) {
$package['contents']['excerpt']['translate'] = 0;
$package['contents']['excerpt']['data'] = '';
}
return $package;
}
public function splitFromContent( $post_id ) {
$post = get_post( $post_id );
if ( $post && false !== strpos( $post->post_content, self::SEPARATOR_START ) ) {
$start_pos = strpos( $post->post_content, self::SEPARATOR_START );
$end_pos = strpos( $post->post_content, self::SEPARATOR_END, $start_pos );
if ( false !== $end_pos ) {
$content = substr( $post->post_content, 0, $start_pos );
$excerpt = substr( $post->post_content, $start_pos + strlen( self::SEPARATOR_START ), $end_pos - $start_pos - strlen( self::SEPARATOR_START ) );
if ( $excerpt ) {
wp_update_post(
[
'ID' => $post_id,
'post_content' => $content,
'post_excerpt' => $excerpt,
]
);
}
}
}
}
}

Nyelvenként külön domain WordPress.com tárhelyen

Szekció neve “Nyelvenként külön domain WordPress.com tárhelyen”

A WordPress.com egy domaint rendel egy webhelyhez, a „különböző domain minden nyelvhez” URL-formához viszont az kell, hogy minden nyelvi domain ugyanahhoz a WordPresshez érjen, és ezt az a tárhely nem adja.

Mit látsz. A WordPress.com domain-hozzárendelésének korlátai miatt az ilyen tárhelyen nem választhatod a nyelvenkénti külön domain URL-beállítást.

Mit tegyél. Használd a másik két lehetőség egyikét: a nyelveket könyvtárakban, vagy URL-paraméterként. Ha a nyelvenkénti domain követelmény, másik tárhely kell.

Importált fordítások és a fordítószerkesztők

Szekció neve “Importált fordítások és a fordítószerkesztők”

Az import kész fordításokat ír, de nem hoz létre fordítási feladatot, a szerkesztők pedig feladatokból dolgoznak. A fordítások a frontenden hiánytalanok, csak az Advanced vagy Classic Translation Editorban nem szerkeszthetők.

Mit látsz. Ha a WP All Import és a WPML All Import kiegészítővel importálsz tartalmat, az importált bejegyzésfordítások a frontenden tökéletesen látszanak. Ha viszont a WPML szerkesztőivel akarod frissíteni őket, gond van: a Classic Translation Editor az alapértelmezett nyelv tartalmát mutatja az importált fordítások helyett, az Advanced Translation Editor pedig üres fordításokat. Ennek oka, hogy többnyelvű tartalom importálásakor a WPML nem hoz létre fordítási feladatot, és a sztring-szegmentáláshoz az kell.

Mit tegyél. Az importált fordítások szerkesztéséhez váltsd a natív WordPress-szerkesztőt, és használd a kézi fordítást.

Angolul regisztrált sztringek, ha az alapértelmezett nyelv nem angol

Szekció neve “Angolul regisztrált sztringek, ha az alapértelmezett nyelv nem angol”

A WPML String Translation 5.0 óta az a sztring, amelynek nyelvét a WPML nem tudja megállapítani, szándékosan angolként regisztrálódik. A téma vagy bővítmény sztringjeinek forrásnyelve a szövegtartomány beállítása, nem az oldal alapértelmezett nyelve, a megoldás tehát az, hogy a szövegtartományhoz beállítod.

Mit látsz. Amikor a sztringek automatikusan regisztrálódnak a WPML String Translationben, forrásnyelvük angol lesz, akkor is, ha az angol nincs telepítve, vagy nem az oldal alapértelmezett nyelve.

Mit tegyél. Állítsd be a szövegtartomány nyelvét:

  1. Nyisd meg a WPML → String Translation oldalt.
  2. Görgess le az Utilities részhez.
  3. Nyisd ki a Set the original language of themes and plugins szakaszt.
  4. Válaszd ki a téma vagy bővítmény szövegtartományának nyelvét.

Az egyes sztringek forrásnyelvének módosítását a A sztringek forrásnyelvének módosítása fejezet írja le. Ne javítsd a tartalék értéket a bővítmény kódjában: minden frissítés visszavonja, a szövegtartomány beállítása a támogatott megoldás.

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