For AI agents: the complete documentation index is available at /tc39-atlas/en/llms.txt, the full documentation bundle is available at /tc39-atlas/en/llms-full.txt, and this page is available as Markdown at /tc39-atlas/en/proposals/year/2021/proposal-intl-list-format.md.
  • English
  • Intl.ListFormat S4

    Proposal details
    Proposal overview

    This proposal introduces the Intl.ListFormat constructor, which enables language-sensitive formatting of lists. It provides format and formatToParts methods for controlling output style and conjunction type.

    Note

    The README below comes from the upstream repository and may contain outdated stage or status metadata. Use the proposal details above as the current source of truth.

    Intl.ListFormat API Specification

    Overview

    The Intl.ListFormat object is a constructor for objects that enable language-sensitive list formatting.

    Usage example

    The following example shows how to create a formatted list using the English language.

    // Create a list formatter in your locale
    // with default values explicitly passed in.
    const lf = new Intl.ListFormat("en", {
        localeMatcher: "best fit", // other values: "lookup"
        type: "conjunction", // "conjunction", "disjunction" or "unit"
        style: "long", // other values: "short" or "narrow"
    });
    
    lf.format(['Motorcycle', 'Truck' , 'Car']);
    // > "Motorcycle, Truck, and Car"

    Implementation Status

    Stage 4

    Implementation Progress

    Backpointers

    Authors

    • Zibi Braniecki (@zbraniecki)

    Reviewers

    • Jamund Ferguson (@xjamundx)
    • Daniel Ehrenberg (@littledan)

    Informative

    This proposal is based on the LDML spec, List Patterns:

    Proposal

    Spec

    You can view the spec text.

    API

    Intl.ListFormat([locales[, options]])

    The Intl.ListFormat object is a constructor for objects that enable language-sensitive list formatting.

    locales

    Optional. A string with a BCP 47 language tag, or an array of such strings. For the general form and interpretation of the locales argument, see the Intl page.

    options

    Optional. An object with some or all of the following properties:

    • localeMatcher

    The locale matching algorithm to use. Possible values are "lookup" and "best fit"; the default is "best fit". For information about this option, see the Intl page.

    • style

    The length of the formated message. Possible values are: "long" (default, e.g., A, B, and C); "short" or "narrow" (e.g., A, B,C). when style is narrow, unit is the only allowed value for the type option.

    • type

    The format of output message. Possible values are "conjunction" that stands for "and"-based lists (default, e.g., A, B, and C), or "disjunction" that stands for "or"-based lists (e.g., A, B, or C). "unit" stands for lists of values with units (e.g., 5 pounds, 12 ounces).

    Intl.ListFormat.prototype.format(list)

    The Intl.ListFormat.prototype.format method formats a list according to the locale and formatting options of this Intl.ListFormat object.

    Example
    const list = ['Motorcycle', 'Bus', 'Car'];
    
     console.log(new Intl.ListFormat('en-GB', { style: 'long', type: 'conjunction' }).format(list));
    // > Motorcycle, Bus and Car
    
     console.log(new Intl.ListFormat('en-GB', { style: 'short', type: 'disjunction' }).format(list));
    // > Motorcycle, Bus or Car
    
     console.log(new Intl.ListFormat('en-GB', { style: 'narrow', type: 'unit' }).format(list));
    // > Motorcycle Bus Car
    Intl.ListFormat.prototype.formatToParts(list)

    The Intl.ListFormat.prototype.formatToParts() method is a version of the format method which it returns an array of objects which represent "parts" of the object, separating the formatted list into its constituent parts and separating it from other surrounding text.

    Example
    const list = ['Motorcycle', 'Bus', 'Car'];
    console.log(new Intl.ListFormat('en-GB', { style: 'long', type: 'conjunction' }).formatToParts(list));
     
    [ { "type": "element", "value": "Motorcycle" }, { "type": "literal", "value": ", " }, { "type": "element", "value": "Truck" }, { "type": "literal", "value": ", and " }, { "type": "element", "value": "Car" } ]

    Development

    Render Spec

    npm install
    npm run build
    open out/index.html