Fordítás PoEdit és bővítmények használata nélkül

[Ezt a cikket 2 perc elolvasni.]

Korábban már részletesen írtam arról, hogy mik is a lehetőségeink, ha szeretnénk egy sablont vagy bővítményt magyar nyelvűre fordítani, ehhez az ajánlott program a PoEdit vagy a bővítmények közül a Loco Translate. A közös ezekben a megoldásokban az, hogy mindegyik a po/mo fájlokhoz nyúl, azaz ezek segítségével hozza létre a fordítást. Természetesen ez így ideális, azonban vannak esetek, amikor mégsem ezt a megközelítést érdemes választani.

Tudvalevő, hogy egy frissítés esetén a fordítás is változhat, ezzel pedig felülírva a korábbi egyedi kifejezéseinket vagy módosításainkat a po/mo fájlokban. Ez igen kellemetlen, főleg ha a WordPress alapértelmezett hivatalos fordításait változtattuk meg. Sokan ilyen esetben minden új változat után, kézzel újra átírják a szükséges kifejezéseket, ez pedig feleslegesen nagy munka. Ennek a problémának az áthidalására született meg az úgynevezett gettext filter, aminek a segítségével a functions.php fájlunkhoz tudunk hozzáadni egyedi fordításokat olyan formában, hogy ezeket nem érinti egy esetleges új verzió megjelenése, tehát a po/mo fájloktól függetlenül is érvényesülni fog a saját kifejezésünk.

Használata nagyon egyszerű, mindössze ennyit kell bemásolnunk a functions.php végére:

add_filter( 'gettext', 'cyb_filter_gettext', 10, 3 );
function cyb_filter_gettext( $translated, $original, $domain ) {

if ( $translated == "Eredeti kifejezés" ) {
 $translated = "Lefordított kifejezés";
 }

return $translated;
}

Természetesen a kódban át kell írnunk a megváltoztatásra szánt és az új kifejezést, de ügyeljünk arra, hogy az eredeti változatot pontosan úgy adjuk meg, ahogy az az oldalon is szerepel, különben nem fog működni a kódunk. A fenti módszerrel bármilyen mondat vagy kifejezés megváltoztatható vagy lecserélhető, de akár teljesen el is lehet őket tüntetni a következő kódrészlettel:

function remove_translation( $translated_text, $untranslated_text, $domain ) {

$removable_text = 'Ide kerül az eltávolítani kívánt kifejezés.';

if ($untranslated_text === $removable_text ) {
return '';
}

return $translated_text;
}
Ha tetszik, mutasd meg másoknak is: