---
title: "Pick your stack"
description: "Find your framework and copy the format id and the init command that set verbatra up for it, along with the usual locale file layout."
type: "reference"
---
# Pick your stack

Find your framework and copy the format id and the init command that set verbatra up for it, along with the usual locale file layout.

Find your framework below and use its `init` command in place of the one in the [Quickstart](https://verbatra.kreitz-webdev.de/docs/quickstart.md). Each file layout is the pattern `init` writes when it finds no locale files; when your files already exist, `init` detects where they are, and `--path` sets the pattern yourself. Every format's full behavior is on [Formats](https://verbatra.kreitz-webdev.de/docs/formats.md). Some stacks also have a step-by-step quickstart, linked at the end of their section.

<StackCards
  labelledBy="page-title"
  cards={[
    { label: "React", icon: "web", mark: "react", formats: ["i18next-json"], href: "#react-with-i18next" },
    { label: "Next.js", icon: "web", mark: "deviconNextjs", formats: ["next-intl-json"], href: "#nextjs-with-next-intl" },
    { label: "Vue and Nuxt", icon: "web", mark: "fontawesomeVuejs", formats: ["vue-i18n-json"], href: "#vue-and-nuxt-with-vue-i18n" },
    { label: "Angular", icon: "web", mark: "angular", formats: ["ngx-translate-json"], href: "#angular-with-ngx-translate" },
    { label: "Flutter", icon: "mobile", mark: "fontawesomeFlutter", formats: ["arb"], href: "#flutter" },
    { label: "Android", icon: "mobile", mark: "android", formats: ["android-xml"], href: "#android" },
    { label: "iOS and macOS", icon: "mobile", mark: "fontawesomeApple", formats: ["apple-strings", "apple-xcstrings"], href: "#ios-and-macos" },
    { label: "gettext", icon: "po", formats: ["gettext-po"], href: "#gettext" },
    { label: "Java and Spring", icon: "server", mark: "deviconSpring", formats: ["properties"], href: "#java-and-spring" },
    { label: ".NET", icon: "server", mark: "dotnet", formats: ["resx"], href: "#net" },
    { label: "YAML", icon: "yaml", formats: ["yaml"], href: "#yaml" },
    { label: "XLIFF", icon: "xliff", formats: ["xliff"], href: "#xliff" },
    { label: "INI", icon: "ini", formats: ["ini"], href: "#ini" },
    { label: "Something else", icon: "custom", formats: [], href: "#something-else" },
  ]}
/>

## React with i18next [#react-with-i18next]

For i18next, react-i18next, and next-i18next projects.

- Format: `i18next-json`
- Files: `locales/{locale}.json`

```bash
npx @verbatra/cli init --format i18next-json --provider gemini --yes
```

Details: [The four JSON formats](https://verbatra.kreitz-webdev.de/docs/formats.md#the-four-json-formats).

Step by step: [React quickstart](https://verbatra.kreitz-webdev.de/docs/quickstart/react.md).

## Next.js with next-intl [#nextjs-with-next-intl]

For next-intl message files, whose values are ICU messages.

- Format: `next-intl-json`
- Files: `messages/{locale}.json`

```bash
npx @verbatra/cli init --format next-intl-json --provider gemini --yes
```

Details: [The four JSON formats](https://verbatra.kreitz-webdev.de/docs/formats.md#the-four-json-formats).

Step by step: [Next.js quickstart](https://verbatra.kreitz-webdev.de/docs/quickstart/nextjs.md).

## Vue and Nuxt with vue-i18n [#vue-and-nuxt-with-vue-i18n]

For vue-i18n, including Nuxt I18n, with single-brace placeholders and pipe plurals.

- Format: `vue-i18n-json`
- Files: `src/locales/{locale}.json`

```bash
npx @verbatra/cli init --format vue-i18n-json --provider gemini --yes
```

Details: [The four JSON formats](https://verbatra.kreitz-webdev.de/docs/formats.md#the-four-json-formats).

Step by step: [Vue quickstart](https://verbatra.kreitz-webdev.de/docs/quickstart/vue.md).

## Angular with ngx-translate [#angular-with-ngx-translate]

For ngx-translate JSON, flat or nested.

- Format: `ngx-translate-json`
- Files: `src/assets/i18n/{locale}.json`

```bash
npx @verbatra/cli init --format ngx-translate-json --provider gemini --yes
```

Details: [The four JSON formats](https://verbatra.kreitz-webdev.de/docs/formats.md#the-four-json-formats).

Step by step: [Angular quickstart](https://verbatra.kreitz-webdev.de/docs/quickstart/angular.md).

## Flutter [#flutter]

For Flutter's Application Resource Bundles. `init` also sets `localeStyle: "posix"`, so `pt-BR` is written as `app_pt_BR.arb`, the name `flutter gen-l10n` reads.

- Format: `arb`
- Files: `lib/l10n/app_{locale}.arb`

```bash
npx @verbatra/cli init --format arb --provider gemini --yes
```

Details: [ARB](https://verbatra.kreitz-webdev.de/docs/formats.md#arb).

Step by step: [Flutter quickstart](https://verbatra.kreitz-webdev.de/docs/quickstart/flutter.md).

## Android [#android]

For `strings.xml` resources. `init` also sets `localeStyle: "android"`, so the token expands to `values` for the source and `values-de` for German.

- Format: `android-xml`
- Files: `app/src/main/res/{locale}/strings.xml`

```bash
npx @verbatra/cli init --format android-xml --provider gemini --yes
```

Details: [Android strings.xml](https://verbatra.kreitz-webdev.de/docs/formats.md#android-stringsxml).

## iOS and macOS [#ios-and-macos]

Two formats, depending on how your project stores its strings. For `.strings` files with their `.stringsdict` plurals:

- Format: `apple-strings`
- Files: `{locale}.lproj/Localizable.strings`

```bash
npx @verbatra/cli init --format apple-strings --provider gemini --yes
```

For an Xcode String Catalog, one file that holds every locale. Create the catalog in Xcode first: verbatra writes into it but never creates it.

- Format: `apple-xcstrings`
- Files: `{locale}Localizable.xcstrings`

The pattern needs the `{locale}` token, but for a String Catalog it expands to nothing: every locale reads and writes the one file `Localizable.xcstrings`.

```bash
npx @verbatra/cli init --format apple-xcstrings --provider gemini --yes
```

Details: [Apple .strings](https://verbatra.kreitz-webdev.de/docs/formats.md#apple-strings) and [Xcode String Catalogs](https://verbatra.kreitz-webdev.de/docs/formats.md#xcode-string-catalogs-xcstrings).

## gettext [#gettext]

For `.po` catalogs and their `.pot` templates, as used by Python, PHP, and C projects. `init` also sets `localeStyle: "posix"`, so `pt-BR` is written as `pt_BR`.

- Format: `gettext-po`
- Files: `locales/{locale}/LC_MESSAGES/messages.po`

```bash
npx @verbatra/cli init --format gettext-po --provider gemini --yes
```

Details: [gettext .po/.pot](https://verbatra.kreitz-webdev.de/docs/formats.md#gettext-popot).

## Java and Spring [#java-and-spring]

For `.properties` message bundles. `init` also sets `localeStyle: "posix"`, so `pt-BR` is written as `messages_pt_BR.properties`.

- Format: `properties`
- Files: `src/main/resources/messages_{locale}.properties`

```bash
npx @verbatra/cli init --format properties --provider gemini --yes
```

Details: [Properties](https://verbatra.kreitz-webdev.de/docs/formats.md#properties).

## .NET [#net]

For `.resx` resource files. Images, icons, and designer entries are left untouched.

- Format: `resx`
- Files: `Resources/Strings.{locale}.resx`

```bash
npx @verbatra/cli init --format resx --provider gemini --yes
```

Details: [.NET .resx](https://verbatra.kreitz-webdev.de/docs/formats.md#net-resx).

## YAML [#yaml]

For nested YAML locale files with i18next-style `{{double-brace}}` placeholders.

- Format: `yaml`
- Files: `locales/{locale}.yml`

```bash
npx @verbatra/cli init --format yaml --provider gemini --yes
```

Details: [YAML](https://verbatra.kreitz-webdev.de/docs/formats.md#yaml).

## XLIFF [#xliff]

For XLIFF 1.2 and 2.0 documents from Angular's `ng extract-i18n`, a CAT tool, or an agency.

- Format: `xliff`
- Files: `locales/{locale}.xlf`

```bash
npx @verbatra/cli init --format xliff --provider gemini --yes
```

Details: [XLIFF](https://verbatra.kreitz-webdev.de/docs/formats.md#xliff).

## INI [#ini]

For classic INI files, with one level of `[section]` headers.

- Format: `ini`
- Files: `locales/{locale}.ini`

```bash
npx @verbatra/cli init --format ini --provider gemini --yes
```

Details: [INI](https://verbatra.kreitz-webdev.de/docs/formats.md#ini).

## Something else [#something-else]

A format verbatra does not ship can still be translated through an adapter you write yourself. See [Write a custom format adapter](https://verbatra.kreitz-webdev.de/docs/custom-format-adapters.md).
