{
  "version": 1,
  "notes": "Shared UI locale contract for Android resource packs and the PWA i18n catalog. Speech recognition languages are independent (see speechLocales). Pref key: Android system/per-app language; PWA prefs.uiLang (empty = auto-detect browser). Fallback always English (en). maxMissing raised to 35 on 2026-08-24 for the nicotine-tracker strings; raised to 40 on 2026-02-13 for settings Units row + Trackers group + search; raised to 85 on 2026-08-24 for caffeine tracker + daily-notes toggle + prompt-history strings (EN fallback pending translation).",
  "defaultLocale": "en",
  "fallbackLocale": "en",
  "pwaPrefKey": "uiLang",
  "locales": [
    {
      "id": "en",
      "bcp47": "en",
      "androidValues": "values",
      "name": "English",
      "nativeName": "English",
      "rtl": false,
      "speechCodes": [
        "en",
        "en-US",
        "en-GB"
      ]
    },
    {
      "id": "ar",
      "bcp47": "ar",
      "androidValues": "values-ar",
      "name": "Arabic",
      "nativeName": "العربية",
      "rtl": true,
      "speechCodes": [
        "ar"
      ],
      "maxMissing": 85
    },
    {
      "id": "az",
      "bcp47": "az",
      "androidValues": "values-az",
      "name": "Azerbaijani",
      "nativeName": "Azərbaycan",
      "rtl": false,
      "speechCodes": [
        "az"
      ],
      "maxMissing": 85
    },
    {
      "id": "de",
      "bcp47": "de",
      "androidValues": "values-de",
      "name": "German",
      "nativeName": "Deutsch",
      "rtl": false,
      "speechCodes": [
        "de",
        "de-DE"
      ],
      "maxMissing": 85
    },
    {
      "id": "es",
      "bcp47": "es",
      "androidValues": "values-es",
      "name": "Spanish",
      "nativeName": "Español",
      "rtl": false,
      "speechCodes": [
        "es",
        "es-ES"
      ],
      "maxMissing": 85
    },
    {
      "id": "fr",
      "bcp47": "fr",
      "androidValues": "values-fr",
      "name": "French",
      "nativeName": "Français",
      "rtl": false,
      "speechCodes": [
        "fr",
        "fr-FR"
      ],
      "maxMissing": 85
    },
    {
      "id": "hi",
      "bcp47": "hi",
      "androidValues": "values-hi",
      "name": "Hindi",
      "nativeName": "हिन्दी",
      "rtl": false,
      "speechCodes": [
        "hi",
        "hi-IN"
      ],
      "maxMissing": 85
    },
    {
      "id": "it",
      "bcp47": "it",
      "androidValues": "values-it",
      "name": "Italian",
      "nativeName": "Italiano",
      "rtl": false,
      "speechCodes": [
        "it",
        "it-IT"
      ],
      "maxMissing": 85
    },
    {
      "id": "ja",
      "bcp47": "ja",
      "androidValues": "values-ja",
      "name": "Japanese",
      "nativeName": "日本語",
      "rtl": false,
      "speechCodes": [
        "ja",
        "ja-JP"
      ],
      "maxMissing": 85
    },
    {
      "id": "ko",
      "bcp47": "ko",
      "androidValues": "values-ko",
      "name": "Korean",
      "nativeName": "한국어",
      "rtl": false,
      "speechCodes": [
        "ko",
        "ko-KR"
      ],
      "maxMissing": 85
    },
    {
      "id": "nl",
      "bcp47": "nl",
      "androidValues": "values-nl",
      "name": "Dutch",
      "nativeName": "Nederlands",
      "rtl": false,
      "speechCodes": [
        "nl",
        "nl-NL"
      ],
      "maxMissing": 85
    },
    {
      "id": "pl",
      "bcp47": "pl",
      "androidValues": "values-pl",
      "name": "Polish",
      "nativeName": "Polski",
      "rtl": false,
      "speechCodes": [
        "pl",
        "pl-PL"
      ],
      "maxMissing": 85
    },
    {
      "id": "pt-BR",
      "bcp47": "pt-BR",
      "androidValues": "values-pt-rBR",
      "name": "Portuguese (Brazil)",
      "nativeName": "Português (Brasil)",
      "rtl": false,
      "speechCodes": [
        "pt",
        "pt-BR"
      ],
      "maxMissing": 85
    },
    {
      "id": "ro",
      "bcp47": "ro",
      "androidValues": "values-ro",
      "name": "Romanian",
      "nativeName": "Română",
      "rtl": false,
      "speechCodes": [
        "ro",
        "ro-RO"
      ],
      "maxMissing": 85
    },
    {
      "id": "ru",
      "bcp47": "ru",
      "androidValues": "values-ru",
      "name": "Russian",
      "nativeName": "Русский",
      "rtl": false,
      "speechCodes": [
        "ru",
        "ru-RU"
      ],
      "maxMissing": 85
    },
    {
      "id": "tr",
      "bcp47": "tr",
      "androidValues": "values-tr",
      "name": "Turkish",
      "nativeName": "Türkçe",
      "rtl": false,
      "speechCodes": [
        "tr",
        "tr-TR"
      ],
      "maxMissing": 85
    },
    {
      "id": "uk",
      "bcp47": "uk",
      "androidValues": "values-uk",
      "name": "Ukrainian",
      "nativeName": "Українська",
      "rtl": false,
      "speechCodes": [
        "uk",
        "uk-UA"
      ],
      "maxMissing": 85
    },
    {
      "id": "zh-CN",
      "bcp47": "zh-CN",
      "androidValues": "values-zh-rCN",
      "name": "Chinese (Simplified)",
      "nativeName": "简体中文",
      "rtl": false,
      "speechCodes": [
        "zh",
        "zh-CN"
      ],
      "maxMissing": 85
    }
  ],
  "speechLocales": {
    "notes": "Speech recognition language is independent of UI locale. Empty/auto uses device or provider detection.",
    "pwa": [
      "",
      "en-US",
      "en-GB",
      "de-DE",
      "fr-FR",
      "es-ES",
      "it-IT",
      "nl-NL",
      "pt-BR",
      "hi-IN",
      "ja-JP",
      "zh-CN",
      "ko-KR",
      "uk-UA",
      "sv-SE"
    ],
    "androidSpeechLanguage": [
      "PROVIDER_AUTO",
      "DEVICE",
      "ENGLISH",
      "GERMAN",
      "SPANISH",
      "FRENCH",
      "ITALIAN",
      "PORTUGUESE",
      "DUTCH",
      "HINDI",
      "JAPANESE",
      "CHINESE",
      "KOREAN"
    ]
  },
  "coreSurfaces": [
    "shell_nav",
    "onboarding",
    "diary_home",
    "progress",
    "settings_hub",
    "dialogs",
    "errors",
    "a11y"
  ]
}
