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