FunkciókBővítményÁrazásForrások
Nyelv módosítása
Források.po vs .mo vs .pot: WordPress Fordítási Fájlok Magyarázata

.po vs .mo vs .pot: WordPress Fordítási Fájlok Magyarázata

SimplePoTranslate Team2026. április 21.
.po vs .mo vs .pot: WordPress Fordítási Fájlok Magyarázata

Megnyitja egy WordPress téma languages mappáját, és három, szinte azonosnak tűnő fájlt talál: twentytwentyfour.pot, twentytwentyfour-de_DE.po és twentytwentyfour-de_DE.mo. Ugyanaz a téma, ugyanaz a nyelv, három különböző kiterjesztés. Melyiket szerkeszti? Melyiket tölti be valójában a WordPress? És miért tűnnek el csendben a fordításai, ha rosszat szerkeszt?

Ha valaha is feltette a kérdést, hogy melyik fájl a fontos a po vs mo fájl vitában, akkor nincs egyedül. Ez a három kiterjesztés minden fordított WordPress oldal gerince, mégis a köztük lévő különbség megzavarja a kezdőket és a tapasztalt fejlesztőket egyaránt. Szerkessze a rossz fájlt, és német látogatói továbbra is angolul látják a tartalmat. Szerkessze a megfelelőt, de hagyjon ki egy lépést, és akkor sem változik semmi.

Ez az útmutató pontosan elmagyarázza, mik azok a .pot, .po és .mo fájlok, hogyan kapcsolódnak egymáshoz a GNU Gettext munkafolyamaton belül, hol találhatók a WordPressben, és miért soha ne nyissa meg a .mo fájlt szövegszerkesztőben. A végére tudni fogja, melyik fájlt érintse, és melyiket hagyja békén.

Mik azok a .pot, .po és .mo fájlok?

Röviden: a .pot fájl az üres sablon, a .po fájl a szerkeszthető fordítás, a .mo fájl pedig a lefordított bináris fájl, amelyet a WordPress futásidőben olvas. Láncot alkotnak, és minden láncszemnek pontosan egy feladata van.

Ez a három formátum mind a GNU Gettext rendszerből származik, amelyre a WordPress, Drupal, valamint több ezer PHP és C projekt is támaszkodik a lokalizációhoz. A Gettext elválasztja a fejlesztő által írt forrás stringeket a fordító által biztosított fordításoktól, így ugyanaz a kódbázis több tucat nyelven is kommunikálhat anélkül, hogy egyetlen PHP sorhoz is hozzá kellene nyúlni.

Gondoljon rá úgy, mint egy receptkártyára. A .pot az üres kártya, összetevőnyílásokkal, de mennyiségek nélkül. A .po az a kártya, amely egy adott ételre van kitöltve. A .mo a laminált, géppel olvasható másolat, amelyet a konyha ténylegesen használ a kiszolgálás során. A papírkártyára ír, soha nem firkál a lamináltra.

A .pot Fájl: A Fősablon

A .pot fájl (Portable Object Template) tartalmaz minden fordítható stringet egy témában vagy bővítményben, üresen hagyva a fordításokat. Ez a fejlesztők által szállított főkatalógus, hogy a fordítók pontosan tudják, mit kell lefordítani. A msgstr sorok üresek, mert még nem választottak nyelvet.

#: includes/checkout.php:42
msgid "Add to Cart"
msgstr ""

#: includes/account.php:108
msgid "Your order has been shipped to %s"
msgstr ""

Figyelje meg az üres msgstr "" részt. A .pot egy sablon, nem fordítás. Nyelvenként egyszer lemásolja, és kitölti az üres részeket. Ritkán szerkeszti a .pot fájlt kézzel; minden alkalommal újra generálódik a forráskódból, amikor a stringek változnak.

A .po Fájl: Az Ön Ember által Szerkeszthető Fordítása

A .po fájl (Portable Object) a .pot egy másolata, a msgstr sorok egy nyelvre kitöltve. Ez az a fájl, amelyet a fordítók és fejlesztők ténylegesen szerkesztenek. Egyszerű szöveg, ember által olvasható és verziókezelésre alkalmas.

#: includes/checkout.php:42
msgid "Add to Cart"
msgstr "In den Warenkorb"

#: includes/account.php:108
msgid "Your order has been shipped to %s"
msgstr "Ihre Bestellung wurde an %s versandt"

A msgid az eredeti angol forrás string, és soha nem változhat. A msgstr az Ön fordítása. A %s egy helyőrző, amelynek érintetlenül kell megmaradnia a fordításban – annak elhagyása vagy átrendezése a törött elrendezések leggyakoribb oka, amelyet részletesen tárgyalunk a PO fájlok fordítása a kódváltozók megsértése nélkül című cikkünkben.

A .mo Fájl: A Fordított Bináris Fájl

A .mo fájl (Machine Object) a .po lefordított, bináris verziója. A WordPress futásidőben nem tudja hatékonyan olvasni a .po fájlokat, ezért helyette az előre lefordított .mo fájlt tölti be. A .mo fájl szövegszerkesztőben való megnyitása olvashatatlan bájtokat mutat – gépeknek készült, nem embereknek.

Amikor a WordPress meghívja a load_textdomain() vagy load_theme_textdomain() függvényt, megkeresi a .mo fájlt, elemzi annak bináris hash táblázatát, és menet közben felcseréli az összes msgid bejegyzést a megfelelő msgstr bejegyzésre. Ez a bináris formátum gyorssá teszi a kereséseket még több ezer stringet tartalmazó oldalakon is.

Hogyan kapcsolódik a három fájl a Gettext munkafolyamatban?

Egyirányú folyamatot alkotnak: a forráskód .pot fájllá válik, a .pot nyelvenkénti .po fájllá, és minden .po .mo fájllá fordítódik. A fordítások mindig lefelé áramlanak.

Íme a teljes életciklus sorrendben:

  1. Egy fejlesztő Gettext függvényekbe, mint például a __() és _e() helyezi a felhasználóknak szánt stringeket a PHP forráskódban.
  2. Egy szkennelő eszköz beolvassa a forráskódot, és létrehozza a .pot sablont, amely tartalmazza az összes beágyazott stringet.
  3. Egy fordító lemásolja a .pot fájlt egy nyelvre specifikus .po fájlba (például de_DE.po), és kitölti az összes msgstr bejegyzést.
  4. Az elkészült .po bináris .mo fájllá fordítódik.
  5. A WordPress futásidőben betölti a .mo fájlt, és megjeleníti a fordított webhelyet.

Amikor a fejlesztő később új stringeket ad hozzá, a .pot újra generálódik, az új bejegyzések beolvadnak minden meglévő .po fájlba (megtartva a régi fordításokat), a fordító kitölti a hiányokat, és a .po újrafordítódik .mo fájllá. A ciklus ismétlődik a projekt élettartama alatt.

A legfontosabb tanulság: Ön a .po fájlt szerkeszti, majd lefordítja .mo fájllá. Soha ne szerkessze közvetlenül a .mo fájlt, és soha ne fordítson a .pot fájlon belül. Ha részletesebb, végponttól-végpontig tartó képet szeretne, a végső útmutató a WordPress lokalizációhoz bemutatja a teljes folyamatot példákkal.

Elnevezési Konvenciók és A Fájlok Elhelyezkedése

A WordPress szigorú a fájlnevekkel kapcsolatban. Ha rosszul nevezi el, tökéletesen lefordított .mo fájlja egyszerűen figyelmen kívül marad, mert a WordPress pontos egyezést keres a szöveg tartomány és a területi beállítások alapján.

A téma és bővítmény fordítások elnevezési mintája:

# Pattern: textdomain-locale.po / .mo
twentytwentyfour-de_DE.po      # German (Germany) translation
twentytwentyfour-de_DE.mo      # compiled binary WordPress loads
twentytwentyfour-fr_FR.po      # French (France)
twentytwentyfour.pot           # template, no locale suffix

A textdomain megegyezik azzal a stringgel, amelyet a Gettext függvények második argumentumaként adunk át, mint például a __( 'Add to Cart', 'twentytwentyfour' ). A locale egy WordPress területi kód, például de_DE, fr_FR vagy pt_BR. A .pot sablon nem tartalmaz területi utótagot, mert nyelvsemleges.

Az elhelyezkedés éppúgy számít, mint az elnevezés. A WordPress néhány előre meghatározott útvonalon keres:

  • Témafordítások a téma saját wp-content/themes/your-theme/languages/ mappájában találhatók.
  • Bővítményfordítások a wp-content/plugins/your-plugin/languages/ mappában találhatók.
  • A translate.wordpress.org-ról származó fordítások és a felhasználói felülírások a globális wp-content/languages/themes/ és wp-content/languages/plugins/ könyvtárakba kerülnek, amelyek elsőbbséget élveznek és túlélik a frissítéseket.

Helyezzen egy helyesen elnevezett de_DE.mo fájlt a megfelelő mappába, és a német látogatók németül látják a tartalmat. Helyezze egy mappával mélyebbre, vagy hibásan írja be a szöveg tartományt, és a WordPress csendben visszavált angolra hibaüzenet nélkül. Ha a fordítások nem jelennek meg, az elnevezés vagy az útvonal eltérése a szokásos bűnös, és a hiányzó fordítások hibaelhárítási útmutatója minden gyakori okot lefed.

Miért Soha Ne Szerkessze Közvetlenül a .mo Fájlt?

Mivel a .mo egy lefordított bináris fájl, nincs biztonságos módja annak kézi szerkesztésére – és bármilyen kényszerített módosítás felülíródik a következő alkalommal, amikor a .po újrafordítódik. A .po az igazság forrása; a .mo egy eldobható build artefakt.

Ez az egyetlen szabály magyarázza a „fordításom megváltozott, de az oldal nem frissült” típusú támogatási jegyek hatalmas részét. Valaki módosít egy stringet, elmenti a .po fájlt, és elfelejti újrafordítani a .mo fájlt. A WordPress továbbra is a régi binárist tölti be, így az új megfogalmazás soha nem jelenik meg. A javítás mindig: szerkessze a .po-t, fordítsa újra .mo-ra, töltse újra.

Van egy második ok is, amiért ez a szabály fontos: a .mo fájlok nem diff-barátak a verziókezelésben. Mivel binárisak, egy apró megfogalmazásbeli változás is egy átláthatatlan „blobot” hoz létre a Git előzményeiben, amelyet egyetlen ellenőrző sem tud elolvasni. Ha a .po fájlt tartja az igazság nyomon követett forrásaként, és a .mo fájlt generált artefaktumként kezeli, akkor a tárolója áttekinthető marad, és a fordításai auditálhatók lesznek.

Ennek manuális elvégzése több tucat nyelven fárasztó és hibalehetőséggel jár. Itt takarít meg valós időt egy felhőalapú munkafolyamat. Az olyan eszközök, mint a SimplePoTranslate lefordítják a .po stringeket, és egyetlen ZIP fájlt adnak vissza, amely a megfelelő .po és .mo fájlt együtt tartalmazza – már lefordítva, helyesen elnevezve, készen áll a wp-content/languages/ mappába való beillesztésre. Nincs semmi kézzel fordítani való, és nincs esély elavult .mo fájlra.

Emellett alkalmazza a Szintaxis Zárolást is, amely a fordítás előtt lefagyaszt minden helyőrzőt, mint például %s, %1$s és {name}, valamint a HTML címkéket. Változói érintetlenek maradnak, így soha nem szállít olyan .mo fájlt, amely tönkretenné az elrendezést. És mivel teljes egészében a felhőben fut, nincs extra bővítmény, amely terhelné az oldalát – feltölt egy fájlt, és letölti a kész, lefordított fordításokat.

Összefoglalás

Miután a po vs mo fájl megkülönböztetés egyértelművé válik, az egész WordPress fordítási rendszer kevésbé tűnik titokzatosnak. A .pot a fejlesztő sablonja, a .po a fordító szerkeszthető munkapéldánya, a .mo pedig a lefordított bináris fájl, amelyet a WordPress ténylegesen kiszolgál a látogatóknak. A fordítások egy irányba áramlanak – sablonból .po-ba, majd .mo-ba –, és Ön csak a középső fájlt szerkeszti kézzel.

Ne feledje a három szabályt, amelyek a fordítási fejtörések kilencven százalékát megelőzik: soha ne fordítson a .pot fájlon belül, mindig fordítsa újra a .mo fájlt a .po szerkesztése után, és pontosan egyezzen a textdomain-locale elnevezéssel. Kövesse ezeket, és lefordított stringjei minden alkalommal meg fognak jelenni.

Készen áll arra, hogy abbahagyja a fordítási fájlok kézi fordításával és elnevezésével való birkózást? Próbálja ki a SimplePoTranslate-et ingyen – nincs szükség hitelkártyára. Töltse fel .po vagy .pot fájlját, és percek alatt megkapja a használatra kész .po + .mo csomagot az ingyenes szinten.