Skip to content

[Change] § <section> — <[Change] § 5.2, § 2.1 — Content language on properties (content_languages[], BCP 47) so language can be matched, not inferredone-line summary> #43

Open

Description

What kind of change?

Add a new field

Which section?

5.2 — Inventory composition

Current text

§ 5.2:
| `properties` | Object | selectable | `available[]` of `{ id, name, domains, supported_formats }`, `included[]`, `pricing`, `max_select` |

§ 2.1, Summary Representation, per line item: `line_item_id` · `channel` · `content_detail` · property names · ...

§ 4.2: `best_for[]` · Advisory planning hints. Non-normative, and never the basis for a match

Proposed text

§ 5.2, replace the properties row:
| `properties` | Object | selectable | `available[]` of `{ id, name, domains, supported_formats, content_languages[] }`, `included[]`, `pricing`, `max_select` |

Add below the § 5.2 table:
`content_languages[]` is an array of BCP 47 language tags (RFC 5646), for example `es`, `es-US`, `en`, naming the primary language(s) of the content alongside which the ad will run on that property. A seller SHOULD declare it on every property. A seller MUST list every language a property may deliver against. Where a seller can control delivery by language, it SHOULD declare separate properties per language so a buyer can select by language. The content languages of a composition are the union of `content_languages[]` across the selected properties, computable by the buyer without a round trip (§ 3).

Why

Content language is a primary buying criterion: in-language campaigns for Spanish-speaking audiences in the US are planned and budgeted as their own line in many media plans, and the same applies to French in Canada and to multilingual markets generally. A brief that says "Spanish-language video" needs a deterministic way to screen shelves by language.

Today the draft gives language nowhere to live except prose. description and specifications are free text. best_for[] is explicitly "never the basis for a match". content_detail has no defined shape. So a conforming buying agent can only infer language from prose or domain names, which is the interpretation step § 7 says the object exists to remove.

The field belongs on the property, not the line item, because properties is selectable: one line item can mix properties in different languages, and the language of the buyer's composition follows its selection (the same logic as § 3.3). OpenRTB and AdCOM already carry content language on the Content object, so this keeps discovery consistent with execution.

Knock-on effects

Would this break an implementation already built to this draft?

No — additive or editorial

Alternatives you considered and rejected

  • A line-item-level language field: wrong when selectable properties mix languages.
  • Put language in content_detail: shape undefined, so not reliably filterable.
  • Rely on best_for[] or description: non-normative / prose by design.
  • Express it through audience taxonomy: an audience segment describes people, not the content the ad runs in; conflating them invites misuse.
  • One line item per language with no tag: still gives the buyer agent nothing structured to filter on.

You are commenting as

Publisher / seller

Before you submit

  • I have read CONTRIBUTING.md and agree my contribution may be published under this repository's licence.
  • This contains no confidential or commercially sensitive information.

Activity

  1. aleksUIX commented on Oct 21, 2026

    @aleksUIX

    Could this define the matching rule alongside the BCP 47 tag syntax?

    Two cases make simple set intersection insufficient:

    • A buyer requesting Spanish with the range es should be able to match es-US. Those strings do not intersect exactly.
    • A property declaring ["es", "en"] intersects ["es"], but it can still deliver English content. That does not establish that a Spanish-only requirement is met.

    I suggest RFC 4647 Basic Filtering for comparing buyer language ranges with declared tags, including its case-insensitive comparison. For a hard language constraint, every language the selected composition may deliver must match an allowed range. Partial overlap may be useful for ranking a preference, but should not be reported as satisfying that hard constraint. An omitted language declaration should remain unknown.

    This uses the separate language-specific properties already proposed here: ["es-US"] can satisfy a broad Spanish requirement, while an unsplit ["es", "en"] property cannot. It adds a matching rule without adding another inventory field.

    These are constructed matching examples from the proposed shape.

    Commenting in a personal capacity.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions