intlayer-lit · git:20260923.e86be10 · 2026-09-23 · sha256 f678becb7c339128

intlayer-lit git:20260923.e86be10A

Immutable. This exact content never changes and is served at /api/v1/blob/f678becb7c339128.

---
name: intlayer-lit
description: Integrates Intlayer internationalization with Lit web components. Use when the user asks to "setup Lit i18n", create a translated LitElement, use the "useIntlayer" controller, or switch locale in a Lit application.
metadata:
  author: Intlayer
  url: https://intlayer.org
  license: Apache-2.0
  mcp-server: "@intlayer/mcp"
  category: productivity
  tags: [i18n, lit, web-components, vite]
  documentation: https://intlayer.org/doc
  support: contact@intlayer.org
---

# Intlayer Lit Usage

## Core Philosophy

Intlayer promotes **Component-Level Content Declaration**. Instead of a massive global translation file, content is declared in `*.content.ts` files adjacent to the Lit elements that use them.

## Workflow

To create a translated element, you need two files:

1.  **Declaration:** A content file (e.g., `myElement.content.ts`) defining the dictionary.
2.  **Implementation:** A `LitElement` (e.g., `my-element.ts`) using the `useIntlayer` controller.

### Declare Content

Create a content file using `t()` for translations.
**File:** `src/components/myElement.content.ts`

```typescript
import { t, type Dictionary } from "intlayer";

const content = {
  // The 'key' must be unique and matches what you pass to useIntlayer()
  key: "my-element",
  content: {
    title: t({
      en: "Welcome",
      fr: "Bienvenue",
      es: "Hola",
    }),
  },
} satisfies Dictionary;

export default content;
```

## Setup

- [Vite and Lit](references/environment_vite-and-lit.md)

Call `installIntlayer()` from `lit-intlayer` before any custom element is registered (see the [Vite and Lit guide](references/environment_vite-and-lit.md)).

## useIntlayer Controller

> [!IMPORTANT]
> In Lit, `useIntlayer` takes the host element as first argument. It registers itself as a `ReactiveController`, so the element re-renders automatically when the locale changes.

```typescript
import { LitElement, html } from "lit";
import { customElement } from "lit/decorators.js";
import { useIntlayer } from "lit-intlayer";

@customElement("my-element")
export class MyElement extends LitElement {
  private content = useIntlayer(this, "my-element");

  override render() {
    return html`
      <h1>${this.content.title}</h1>
      <!-- Return string (.value) for native attributes -->
      <img alt=${this.content.title.value} />
    `;
  }
}
```

## useLocale Controller

```typescript
import { useLocale } from "lit-intlayer";

// Inside a LitElement
private locale = useLocale(this);

// this.locale.locale, this.locale.availableLocales, this.locale.setLocale("fr")
```

## Compiler

The [Intlayer Compiler](references/compiler.md) can extract all your content keys from your components, using one CLI command (`npx intlayer extract`) or automatically at app build.

## References

- [Website](https://intlayer.org)
- [Doc](https://intlayer.org/doc)

### Environments

- [Vite and Lit](references/environment_vite-and-lit.md)
- [Astro and Lit](references/environment_astro_lit.md)

### Concepts

- [Variants](references/concept_variants.md)
- [Collections](references/concept_collections.md)
- [Compiler](references/compiler.md)
- [Formatters (number, currency, date, …)](references/formatters.md)

### Packages

- [Intlayer Exports](references/packages_intlayer_exports.md)