FunktionerPluginPriserRessourcer
Skift sprog
RessourcerSådan kompileres .po til .mo-filer (4 metoder)

Sådan kompileres .po til .mo-filer (4 metoder)

SimplePoTranslate Team3. maj 2026
Sådan kompileres .po til .mo-filer (4 metoder)

Du brugte en eftermiddag på at perfektionere en tysk oversættelse. Hver streng i din de_DE.po-fil ser perfekt ud, pladsholderne er intakte, flertalsformerne er korrekte. Du uploader den til dit website, skifter sprog til tysk, og... intet. Siden er stadig på engelsk. Du dobbelttjekker filnavnet, mappen, tekstdomænet. Alt ser rigtigt ud. Så hvorfor viser WordPress ikke din oversættelse?

Ni ud af ti gange er svaret det samme: du redigerede .po-filen, men kompilerede den aldrig til .mo. WordPress læser ikke .po-filer under kørsel — det indlæser den kompilerede binære .mo-fil. Hvis du ønsker, at dine oversættelser rent faktisk skal vises, skal du kompilere po til mo hver eneste gang, du ændrer teksten. .po-filen er din redigerbare kilde; .mo-filen er det, websitet serverer.

Denne guide forklarer, hvorfor dette kompilerings-trin eksisterer, og gennemgår derefter fire pålidelige måder at gøre det på: WP-CLI, den klassiske msgfmt-kommando, Poedit, og et cloud-værktøj, der automatisk producerer .mo-filen for dig. Vi vil også dække den mest almindelige faldgrube — at glemme at rekompilere — og det nyere .l10n.php-format, som WordPress nu foretrækker for hastighed.

Hvorfor indlæser WordPress .mo og ikke .po?

WordPress indlæser .mo-filer, fordi de er kompilerede binære filer optimeret til hurtige opslag, mens .po-filer er almindelig tekst designet til mennesker at læse og redigere. At parse tekst ved hver sideindlæsning ville være langsomt; at læse en forudbygget binær hashtabel er næsten øjeblikkeligt.

En .po-fil er linjebaseret og brugervenlig. Hver post parrer en kilde-msgid med en oversat msgstr, plus kommentarer, der angiver, hvor strengen kom fra. Det er fantastisk til redigering, men forfærdeligt for ydeevnen — serveren skulle genparse hele tekstfilen ved hver anmodning.

#: includes/cart.php:88
msgid "Your cart is empty"
msgstr "Ihr Warenkorb ist leer"

En .mo-fil pakker de samme strengpar i et binært format med en intern opslagstabel, så WordPress kan springe direkte til en oversættelse uden at scanne tekst. Ulempen er, at .mo er ulæselig for mennesker og skal regenereres, hver gang .po-filen ændres. Hvis forskellen mellem .po og .mo stadig er uklar, nedbryder vores forklaring om .po vs .mo vs .pot-filer hvert format og deres relation.

Fire måder at kompilere po til mo på

Der er ikke ét enkelt "korrekt" værktøj — det bedste valg afhænger af, hvordan du allerede arbejder. Nedenfor er fire pålidelige metoder, fra en enkeltlinjekommando til en fuldt automatiseret cloud-arbejdsgang. Alle fire producerer den identiske binære .mo-fil, som WordPress indlæser under kørsel.

Metode 1: WP-CLI

Den mest elegante moderne tilgang er WP-CLI, som kan kompilere en hel mappe med .po-filer i én kommando. Hvis du allerede administrerer WordPress fra kommandolinjen, passer dette naturligt ind i din arbejdsgang.

# Compile every .po file in the languages folder to .mo
wp i18n make-mo languages/

# Compile into a specific destination directory
wp i18n make-mo languages/ build/languages/

Kommandoen make-mo scanner destinationsmappen, kompilerer hver .po-fil, den finder, og skriver en matchende .mo-fil ved siden af den (eller til den destination, du angiver). Den håndterer batches elegant, hvilket gør den ideel, når du vedligeholder mange sprog på én gang. Det er det anbefalede værktøj til ethvert projekt, der allerede bruger WP-CLI.

Metode 2: msgfmt

Det originale Gettext-værktøj til denne opgave er msgfmt, en del af GNU gettext-pakken. Den kompilerer en enkelt .po-fil til en enkelt .mo-fil og er tilgængelig på stort set alle Linux- og macOS-systemer.

# Compile one file
msgfmt my-plugin-de_DE.po -o my-plugin-de_DE.mo

# Add statistics about translated, fuzzy, and untranslated strings
msgfmt --statistics my-plugin-de_DE.po -o my-plugin-de_DE.mo

# Install it first if missing
#   macOS:  brew install gettext
#   Debian: sudo apt-get install gettext

Flaget -o navngiver outputfilen. Flaget --statistics er oprigtigt nyttigt — det fortæller dig, hvor mange strenge der er oversat, 'fuzzy' eller stadig tomme, så du fanger en ufuldstændig oversættelse, før du udruller den. Til scripting af én fil ad gangen er msgfmt det pålidelige, enkle valg.

Fordi msgfmt er et simpelt kommandolinjeværktøj, passer det perfekt ind i automatisering. Du kan pakke det ind i en shell-løkke for at kompilere en hel mappe, eller forbinde det til en CI-pipeline, så hvert commit, der rører ved en .po-fil, automatisk producerer en frisk .mo-fil. Et almindeligt mønster er for f in languages/*.po; do msgfmt "$f" -o "${f%.po}.mo"; done, som kompilerer hvert sprog i én omgang. Flaget --check tilføjer validering, der markerer fejl i formatstrenge mellem msgid og msgstr, før de når produktion — en billig sikkerhedsforanstaltning mod de ødelagte pladsholder-fejl, der i stilhed korrumperer oversatte layouts.

Metode 3: Poedit (Kompilerer ved lagring)

Hvis du redigerer oversættelser i en grafisk editor, kompilerer Poedit automatisk for dig. Hver gang du gemmer en .po-fil, skriver Poedit den matchende .mo-fil lige ved siden af den — ingen separat kommando, intet ekstra trin.

Dette er en grund til, at Poedit forbliver populær blandt oversættere, der ikke er komfortable med kommandolinjen. Du åbner .po-filen, skriver dine oversættelser, trykker gem, og begge filer opdateres samtidigt. Du kan bekræfte adfærden under Poedits præferencer, hvor automatisk .mo-kompilering ved lagring er aktiveret som standard. Poedit og lignende desktop-værktøjer gennemgås i top 5 gratis værktøjer til at redigere og oversætte PO-filer på Mac og Windows.

Ulempen ved en desktop-editor er, at kompilering kun sker, når et menneske åbner filen og gemmer den. Det er fint for et enkeltpersonsprojekt, men det skalerer ikke til et dusin sprog eller et team, der sender filer frem og tilbage. Hvis nogen redigerer en .po-fil i et andet værktøj og kopierer den ind i arkivet uden at åbne Poedit, opdateres .mo-filen aldrig. For større eller samarbejdsprojekter fjerner en automatiseret metode — kommandolinje eller cloud — denne afhængighed af at huske at trykke gem.

Metode 4: Et cloud-værktøj, der genererer .mo-filen for dig

Den fjerde mulighed fjerner kompilerings-trinnet helt: brug en cloud-tjeneste, der returnerer den kompilerede .mo-fil sammen med den oversatte .po-fil. Du kører aldrig en kommando eller gemmer en fil to gange — du uploader, og færdige, korrekt navngivne filer kommer tilbage.

SimplePoTranslate fungerer præcis på denne måde. Du uploader en .po eller .pot, den oversætter strengene med kontekstfølsom AI, og den returnerer en enkelt ZIP-fil, der indeholder .po og .mo genereret side om side — allerede kompileret, allerede navngivet til at matche dit tekstdomæne og sprogkode. Der er ingen separat kompileringsrunde, og ingen chance for at glemme den ene.

Den håndterer også de detaljer, der bryder manuelle arbejdsgange. Syntax Locking fastfryser pladsholdere som %s, %1$s og {name} plus HTML-tags før oversættelse, så dine variabler overlever intakte i .mo-filen. Fuld support for Gettext flertalsformer betyder, at komplekse flertalsformer også kompileres korrekt — et emne, der er værd at forstå dybtgående, og som vi dækker i forstå Gettext flertalsformer. Og da det kører i skyen, er der ingen plugin at installere og intet build-værktøj at vedligeholde.

Den mest almindelige faldgrube: Du glemte at rekompilere

Den største enkeltstående årsag til, at oversættelser ikke vises, er at redigere .po-filen, men glemme at rekompilere .mo-filen. WordPress fortsætter med at indlæse den gamle binære fil, så din nye formulering vises aldrig — og der er ingen fejlmeddelelse til at fortælle dig hvorfor.

Det mentale billede, du skal huske: .po-filen er dit udkast, .mo-filen er det, der sendes ud. Enhver ændring i .po-filen er usynlig for WordPress, indtil du regenererer .mo-filen. Gør rekompilering til en refleks efter hver redigering, eller brug et værktøj, der kompilerer automatisk, så trinnet aldrig kan springes over.

Denne faldgrube er særligt snedig ved overlevering fra staging til produktion. En udvikler redigerer og rekompilerer lokalt, ser oversættelsen fungere, udruller derefter kun .po-filen og glemmer .mo-filen — så produktionen beholder stille og roligt den gamle tekst. Når du flytter oversættelsesfiler mellem miljøer, skal du flytte .po-filen og den frisk kompilerede .mo-fil sammen, eller kompilere som en del af dit udrulningstrin, så den binære fil altid genopbygges fra den aktuelle kilde.

Hvis dine oversættelser stadig nægter at vises efter rekompilering, er problemet normalt en navnekonflikt, en forkert mappe eller et caching-lag, der holder den gamle fil. Den fulde tjekliste findes i hvorfor dine oversættelser ikke vises i WordPress.

En note om det nyere .l10n.php-format

Nylige WordPress-versioner introducerede et tredje runtime-format: .l10n.php. I stedet for en binær .mo-fil gemmes oversættelser som et almindeligt PHP-array, som PHP opcode-cachen kan holde i hukommelsen, hvilket gør opslag endnu hurtigere end .mo på travle websites.

<?php
return [
	'domain'  => 'my-plugin',
	'messages' => [ 'Your cart is empty' => 'Ihr Warenkorb ist leer' ],
];

WordPress genererer automatisk .l10n.php-filer, når den har den matchende .mo-fil tilgængelig, så du behøver ikke at bygge dem manuelt. For nu forbliver kompilering af en korrekt .mo-fil grundlaget — ydeevneformatet er afledt derfra.

Afrunding

For at kompilere po til mo pålideligt skal du vælge den metode, der passer til din arbejdsgang: WP-CLI til kommandolinje-batches, msgfmt til enkeltfiler med statistik, Poedit til automatisk kompilering ved lagring, eller et cloud-værktøj, der bygger .mo-filen for dig, så trinnet aldrig springes over. Alle fire producerer den samme binære fil, som WordPress har brug for under kørsel.

Uanset hvilken vej du vælger, husk den gyldne regel: rediger .po-filen, og kompilér derefter til .mo — hver gang. Den ene vane forhindrer den mest frustrerende oversættelsesfejl i WordPress, den hvor alt ser rigtigt ud, men websitet stædigt forbliver på engelsk.

Klar til at springe det manuelle kompileringstrin over for altid? Prøv SimplePoTranslate gratis — intet kreditkort påkrævet. Upload din .po-fil og download et klar-til-udrulning .po + .mo-bundle på den gratis version på få minutter.