Translate a PO (gettext) file into Portuguese
Upload your .po or .pot file, pick Brazilian or European Portuguese, and get the same file back with translated msgstr values, the Language and Plural-Forms headers set and printf variables checked. A report lists any strings left unchanged and why.
What it costs
For a PO file (gettext) with about 2,500 words of values, into Portuguese:
To understand, internal use.
Ready to send, by the technical specialist.
Cross-checked. For documents that commit you.
Price for one language, original layout included. VAT not applicable — article 293 B of the French General Tax Code (CGI). The exact quote, based on your file's word count, is shown before you pay.
Brazil or Portugal: decide before you upload
Manuce treats Brazilian Portuguese and European Portuguese as two separate languages. In a user interface the gap is not a handful of words; it hits the most visible labels.
msgid "Save file"becomes Salvar arquivo in Brazil and Guardar ficheiro in Portugal.- Download: Baixar vs Transferir; Password: Senha vs Palavra-passe; Screen: Tela vs Ecrã; User: Usuário vs Utilizador.
- Addressing the user: Brazil uses você with third-person verbs; in Portugal tu feels too familiar for software, so interfaces lean on the polite imperative or impersonal phrasing (Introduza a palavra-passe).
If your app targets both markets, plan two files, for example pt_BR.po and pt_PT.po; ordering both languages together brings a 20% discount on the whole order. A single generic "pt" file will always read as foreign on one side of the Atlantic.
What Portuguese changes in gettext strings
Plurals. CLDR lists three categories for Portuguese (one, many, other), but many only covers large numbers in compact notation (1 milhão de…); in a gettext file Portuguese is written in practice with two forms, msgstr[0] and msgstr[1]. The catch is zero: the usual Brazilian rule, plural=(n > 1), treats 0 as singular, while the European rule, plural=(n != 1), treats it as plural. "0 arquivo" on one side, "0 ficheiros" on the other.
Gender. "%s was deleted" becomes %s foi excluído or %s foi excluída depending on whether %s stands for o arquivo or a pasta. With no hint, the translation has to pick one; a msgctxt or a #. comment naming the object steers the choice.
Contractions. Portuguese merges prepositions and articles: de + o = do, em + a = na. "Settings of %s" will need Configurações do %s or da %s depending on the inserted word, which no translation can guess. Such concatenations are best rewritten as full sentences in the code.
Length and typography. Portuguese often runs longer than English (Settings → Configurações), so watch buttons and tabs. No space before colons or question marks (unlike French), and a decimal comma. Accented letters (ç, ã, õ, ê) need a UTF-8 file with a matching charset in the Content-Type header.
What Manuce returns, and what it does not do
- The same file in the same format: indentation, entry order, quotes, comments, line endings, encoding and BOM preserved; only the values change.
- A
.pottemplate comes back as a Portuguese.po, with theLanguageandPlural-Formsheaders set and as manymsgstr[n]as the language needs. msgctxt,msgid_pluraland#.,#:,#,comments kept; context guides the translation:"Open"withmsgctxt "verb"gives Abrir, withmsgctxt "status"rather Aberto.- printf variables checked:
"Page %1$d of %2$d"must keep both variables in Página %1$d de %2$d. - Every translated value is compared with the source (variables, tags); if a mismatch persists, the source value is kept and the report says so.
- A report: strings translated, strings left as they were and why.
Not translated: keys, empty values, URLs, email addresses, numbers, colours, date formats, identifiers and anything marked as non-translatable. A format such as %m/%d/%Y therefore stays as it is; switching to the day/month/year order used in both Brazil and Portugal is up to you. You get the .po back; compiling the .mo remains on your side. Manuce does not take glossaries or translation memories and does not provide sworn or certified translation. Pricing counts the words in values only, keys and tags excluded.
Preparing the file and checking the Portuguese .po
Before uploading:
- Start from an up-to-date
.pot, regenerated after your latest code changes, or from an existing.poto complete. - Add
#.comments wherever a word's gender or role is ambiguous: #. %s is a folder name is enough to point towards excluída. - For a product or command name that must stay in English, check the free sample, then the delivered translation.
After delivery:
- Check the
Languageheader: it must match what your loader expects (pt_BR,pt_PTorpt). - Run
msgfmt --check: it flags an incomplete header, an inconsistent number ofmsgstr[n]or a brokenc-formatstring. - Test the interface with n = 0, 1 and 2 to confirm the plural rule of your chosen variant.
- Read the report: a string left in the source language often points to a malformed variable in the original.
- Look at short labels in the running interface, where Portuguese tends to overflow.
In practice
- Upload your .po or .pot file and choose Brazilian or European Portuguese.
- Read the free sample: variant vocabulary, form of address, terms that should stay unchanged.
- Accept the quote, based on the words in the values, and pay.
- Download the .po and the report, run msgfmt --check and test plurals with 0, 1 and 2.
Frequently asked questions
Can I get both Brazilian and European Portuguese in one order?
Yes, by selecting both languages: they are separate languages at Manuce, so you receive two separate .po files. The 20% discount then applies to the whole order. A single file covering both variants is not offered.
Why only two msgstr entries when CLDR lists three plural categories?
The Portuguese many category only applies to large numbers in compact notation, such as "1 milhão". Gettext describes Portuguese with two forms, and Manuce sets as many msgstr[n] as the target language needs. The real difference between variants is how zero is treated.
My .pot has no Language header. Is that a problem?
No. The template comes back as a .po for the target language with Language and Plural-Forms set. Just make sure the language code matches the one your application loads.
Will my app's name stay in English?
Manuce does not take glossaries or terminology instructions. Check the free sample before paying, then review the delivered translation; the report also lists strings that were left unchanged.
What if a %s variable goes missing in the translation?
Each translated value is compared with the source for variables and tags. If the mismatch persists, the source value is kept and the report flags it, so your app does not crash at runtime.
The specialist in charge
This subject goes to Dédale, the technical specialist. See how it works.
The same file, into another language
Into Portuguese, other files
See also
Try it on your own file, free
A sample of your file translated at the level you choose, before any payment. You judge, then you decide.