Matterhorn 11-006 · PDF/UA-1 UA1:7.2-3

PDF metadata with no language: the title in the wrong voice

BlockerCheckpoint 11: Declared Natural LanguageWCAG 3.1.1 (A)

The XMP dc:title (and other metadata) has no xml:lang and the catalog has no /Lang.

The condition, as the protocol states it. “Natural language for document metadata cannot be determined.”

Matterhorn Protocol 1.1, checkpoint 11, index 11-006, section UA1:7.2-3. Software can decide this one on its own.

What a screen reader actually does

The document title is announced in the wrong voice.

What the condition is

“Document metadata” here means the XMP packet, and in practice the one piece of it that anybody hears: the title. There are two places its language can come from.

An xml:lang on the value in the packet:

<dc:title>
  <rdf:Alt>
    <rdf:li xml:lang="he">דוח שנתי 2025</rdf:li>
  </rdf:Alt>
</dc:title>

The catalog’s /Lang, the document’s default language, which applies to any text that does not declare its own:

1 0 obj
<< /Type /Catalog /Lang (he-IL) /Metadata 5 0 R ... >>
endobj

The condition fails when neither is there. One detail catches people out. XMP language alternatives include a default entry marked xml:lang="x-default", and a title with a single value is commonly written as that entry alone. x-default is a convention for “the default alternative”, not the name of a language. Whether it counts is where checkers disagree; more on that below.

What the user hears

The title is the first thing announced when the document opens, provided 07-001 and 07-002 are in order. With no language, it is spoken in the screen reader’s default voice. A Hebrew title on an English-default machine means the first words the person hears about the document are not words.

It is a small thing beside an undetermined language for the whole page, which is 11-001 and usually present at the same time. But it is the one string read before anything else, and it is read every time the person returns to the window.

Where it comes from

A title with no packet. Some producers and libraries write the title only into the document information dictionary and write no XMP at all (06-001). That /Title has no language entry of its own, so without a catalog /Lang its language is undetermined. This is the shape Taggart reports most directly.

A packet written without language attributes. A dc:title that is not a language alternative at all, or a packet with other properties and no title, beside a title in the information dictionary.

No catalog /Lang. The common factor in every case. A document that declares its language in the catalog passes this condition whatever its packet looks like.

How to check it free

Poppler’s pdfinfo (free). pdfinfo report.pdf shows Metadata Stream: no when there is no packet and prints the information-dictionary title. pdfinfo -meta report.pdf prints the packet itself; look at the rdf:li inside dc:title and see what its xml:lang says.

The catalog language, with pikepdf (free):

python3 -c "import pikepdf, sys; pdf = pikepdf.open(sys.argv[1]); print(pdf.Root.get('/Lang'))" report.pdf

Acrobat Pro shows the packet under Document properties → Description → Additional Metadata → Advanced (Adobe: edit document metadata), and the catalog language under Properties → Advanced → Reading Options → Language.

veraPDF tests the title’s language alternatives, and treats an x-default title as undetermined unless the catalog has a /Lang.

How to fix it free, in Acrobat Pro

Set the document language. From Adobe’s guide to checking accessibility:

  1. The hamburger menu (Windows) or the File menu (macOS) → Properties → Advanced.
  2. Under Reading Options, choose the language from the Language list, or type its code if it is not listed.
  3. OK, and save.

Or from the Accessibility Checker: select Primary Language, choose Fix from the options menu, and pick the language in the Set Reading Language dialog. There is no need to edit the XMP by hand.

What Taggart does

Taggart reports this as a blocker when three things hold: the catalog /Lang is missing or not shaped like a BCP 47 tag; the XMP packet, if there is one, contains no xml:lang anywhere; and there is a title, in the packet or in the information dictionary.

The document has a title in its metadata but neither a catalog /Lang nor an xml:lang in the XMP packet, so the language of the metadata cannot be determined.

The second condition makes Taggart laxer than veraPDF. Any xml:lang satisfies it, x-default included, so a file with an ordinary dc:title and no catalog /Lang is not reported here. It is not let off: the missing catalog language is reported as 11-001 wherever the page text has no language, and the one fix clears both.

The repair is document-language, which runs only when you approve it. It writes the catalog /Lang and adds dc:language to the packet, and the change log says so:

set catalog /Lang to en-GB

set dc:language to en-GB

In the app the tag starts as taggart’s proposal: he-IL for Hebrew and ar for Arabic, from the letters; for text in Latin letters, the language its commonest words clearly point to — English, German, French, Spanish, Italian, Dutch, Portuguese or Polish. A page with too few words to tell gets en-US. Where the words point nowhere clearly, or the text is in another script, there is no proposal and the step asks you to type the tag. You can type your own, such as en-GB, in the same step — or set the language in the program that made the file and export it again.

Two side effects are worth knowing, both on a file with a title in the information dictionary and no packet:

  • The language fix leaves the title behind. It creates a packet to hold dc:language and does not copy the information-dictionary title into it, so the next check reports 06-003: a packet with no dc:title. Fix All Safe does not rescue it, because its metadata fix then finds a packet already there and does nothing. Tick Set the document title in the same run; its field starts with the title the file already has, and with both, nothing is left over.
  • Fix All Safe alone makes this finding disappear without setting a language. Its metadata fix builds the missing packet and carries the title into it as x-default, which this check accepts. The catalog still has no /Lang, and 11-001 is still reported. Read that as the language being unfixed, because it is.

How Taggart handles it

Taggart checks for this condition automatically and reports it as a blocker, with where in the file it found it.

The fix is Set the document language. It changes what the document means, so Taggart proposes it and waits for your approval rather than applying it unattended.

Whatever Taggart changes, the page still looks identical. Fixes edit the PDF object model, not the content streams, and every remediation is re-rendered and compared against the original at structural similarity ≥ 0.999 before you get the file back. A tool that quietly reflows your document is worse than no tool.

Frequently asked questions

Is xml:lang="x-default" a language?

No. It marks the default entry in a list of alternatives and says nothing about what language that entry is in. veraPDF's PDF/UA-1 profile treats an x-default title as undetermined unless the catalog has a /Lang. Taggart accepts any xml:lang in the packet, x-default included, so it reports this condition less often than veraPDF does. A catalog /Lang settles it for both.

Why does the catalog /Lang count for the metadata?

Because it is the document's default language, and the default applies to text that does not declare its own. The title is text. It is the simplest fix, and the one veraPDF and Taggart both accept.

Do I need dc:language as well?

Not for this condition. dc:language lists the languages of the document's content; it is not a language tag on the title string. Taggart writes it alongside the catalog /Lang because it costs nothing, but the catalog entry is what resolves the finding.

The title is in two languages. What then?

XMP can hold that: dc:title is a list of alternatives, each with its own xml:lang. But the window title comes from one string, and the PDF specification points the title bar at the information dictionary's /Title, which has no language entry. A title in the document's language, with a catalog /Lang that says what that is, is the arrangement that works everywhere.

Where this sits in the standards

Standards this condition maps to
StandardReference
Matterhorn Protocol 1.1Checkpoint 11 (Declared Natural Language), index 11-006
PDF/UA-1 (ISO 14289-1)Clause 7.2-3
WCAG 2.13.1.1 Language of Page — Level A
EN 301 549 / Section 508 / ADA Title IIAll three point at WCAG 2.1 Level AA for non-web documents, so a Level A or AA criterion here is in scope for each of them.

Other conditions in checkpoint 11

Checkpoint 11 covers declared natural language. These are its other failure conditions; the ones without a link are in the rule set but do not have a written page yet.

Check your own file. Taggart’s validator is free and unlimited — 75 of the 87 Matterhorn conditions software can decide, with the other 12 listed for you to confirm; no watermark, no expiry, and no account needed up to 60 pages.

Check a PDF free

Checked with Taggart on a generated file that fails this condition on . The Acrobat steps follow Adobe’s documentation and were not walked through by hand. Last updated .