Docs navigation

Troubleshooting

When Loccy is set up correctly, it renders each translation inline next to its key, so you read the actual copy, not t('reservation.title'):

Code with Loccy inline translation previews shown next to each key

If yours doesn't look like this, find your symptom below.

#First: Loccy expects a standard setup

Loccy works by static analysis: it reads your JSON translation files and your source code as written, without running your app. When your i18n setup follows the framework's official docs, everything is detected automatically. Almost every issue reported in the community comes from a setup that diverges from it:

  • Translations in JS/TS, not JSON. Loccy reads JSON files only.
  • Translations assembled at runtime. Loccy only sees what's on disk, not files merged, namespaced, or reshaped in JS/TS.
  • next-intl treated like react-i18next. next-intl has no namespaces: the argument to useTranslations is only a key prefix, and messages stay one file per locale.
  • The t-function passed in from another scope. Loccy misses the namespace/prefix bound to it, so keys look unresolved or missing.

The closer you stay to the documented setup, the less configuration Loccy needs. The two symptoms below expand on these causes.

#No previews shown

No inline text appears next to your keys at all:

Same code with no inline previews rendered

Loccy shows previews only once it has found both your translation files and the calls that use them in your code.

#Are your translation files detected?

Check these in loccy.yaml (how to create one):

KeyWhat to verify
translations.globGlob must actually match your files. Loccy reads JSON only.
translations.layoutPattern must match your layout: {locale}.json for per-locale files, {locale}/{namespace}.json for per-locale folders.
frameworkMust match your i18n library: react-i18next, next-intl, vue-i18n, or custom.
framework: vue-i18n
translations:
  glob: src/locales/**/*.json
  layout: "{locale}.json"

#Are your translation calls detected?

If files are detected but keys still render bare, Loccy isn't matching the t() calls in your code:

SettingDefaultFix
usages.customTFunctions[]Add your wrapper's t-function names if you don't call the framework's built-in t-function (usually t / $t) directly.
usages.detectKeysInStringstrueRecognizes keys passed as bare strings (when a matching translation exists). Leave on unless you have many key-shaped non-translation strings.
usages.includeframework defaultMust cover the files with your calls. Git-ignored files are skipped automatically.

#Is only the hover menu missing?

Inline previews show, but hovering a key opens nothing. The hover menu uses VS Code's hover system. Re-enable it:

{ "editor.hover.enabled": true }

#Missing translations shown

Previews render, but with a ⚠ warning listing locales that are missing the key:

Inline previews showing a "3 missing (en, ru, de)" warning next to keys

#The t-function is passed in from an outer scope

Loccy computes a keypath from the t binding in the same file. If t arrives with a namespace/prefix already bound (passed in as a prop, or from a parent), Loccy resolves the bare keypath without that prefix, doesn't find it, and reports the key as missing:

// ❌ t is passed in: its "reservation" namespace lives only in the type,
// so Loccy looks up 'guestName' (not 'reservation.guestName') and reports it missing
function GuestNameField({ t }: { t: TFunction<'reservation'> }) {
  return <Input placeholder={t('guestName')} />
}

// ✅ create the binding where the keys are used
function GuestNameField() {
  const { t } = useTranslation('reservation')
  return <Input placeholder={t('guestName')} />
}

#Getting help

  • Community: ask anything in our Discord.
  • Pro subscribers: reach the developer directly through the support form in the Loccy app.