Skip to content
Nuvyntra Labs
All toolkits

Toolkit

NuvLoc

Agent-driven localization CLI for sibling .resx hosts — the agent translates

Current 1.1.2

Checks i18n.json, diffs culture .resx files, and installs /nuvloc.status and /nuvloc.translate for your coding agent. The agent translates. NuvLoc does not call OpenAI, Azure, or any vendor API and does not take an API key. It does not bind strings to the UI.

Abstract

Usual alternatives — Visual Studio Multilingual App Toolkit, ResXResourceManager, Crowdin / Phrase — either bind a vendor API, manage a TMS, or stay in the IDE. NuvLoc is a PackAsTool CLI (command nuvloc). It diffs an English sibling .resx against culture files from i18n.json and hands the missing / stale worklist to the same Spec Kit agent set as Nuvyn. The coding agent writes the culture files. Coverage and placeholder checks prove completeness, not correctness. XAML, a markup extension, or code is the host’s choice.

Install

dotnet tool install -g NuvyntraLabs.NuvLoc.Cli --source https://api.nuget.org/v3/index.json
nuvloc version
nuvloc init --configfile i18n.json --agent cursor

Package ID: NuvyntraLabs.NuvLoc.Cli

NuvyntraLabs.NuvLoc.Cli is a global dotnet tool (net10.0, command nuvloc). Do not run dotnet add package NuvyntraLabs.NuvLoc.Cli in an app. Put i18n.json at the project root first — init does not create a host. Publishing is pipeline-only on the NuvLoc repository.

Commands (1.1.2)

CommandPurpose
nuvloc initCheck i18n.json and install /nuvloc.status and /nuvloc.translate
nuvloc updateRefresh skills and .nuvloc/reference on an existing NuvLoc app
nuvloc agent addInstall slash commands for a second coding agent
nuvloc versionPrint the installed CLI version
nuvloc planMissing / stale / extra / placeholder worklist for the agent
nuvloc statusCoverage table per language. Does not translate
nuvloc checkCI gate: exit 1 on missing, stale, or broken placeholders

Global options: --configfile (default i18n.json), --path, --agent cursor|copilot|claude|gemini|codex|windsurf|… (Spec Kit set), --format human|json, --lang (repeatable), --ci, --force (skills only), --write-cache, --no-update-check.

nuvloc init --configfile i18n.json --agent cursor
nuvloc update
nuvloc agent add copilot
nuvloc plan --configfile i18n.json --format json
nuvloc status --configfile i18n.json
nuvloc check --configfile i18n.json --ci
nuvloc version
nuvloc --no-update-check version

Exit codes: 0 success (including a complete status / plan), 1 check found missing, stale, or broken placeholders, 2 usage (missing i18n.json, unknown agent, unknown command, invalid BCP-47 language, or --lang not in i18n.json).

JSON

Put this i18n.json at the project root before nuvloc init. platform is maui, wpf, winui, avalonia, or uno. languages must be BCP-47 culture codes. The CLI has been tested with the popular codes in the table below.

{
  "platform": "maui",
  "source": "Resources/Strings/AppResources.resx",
  "languages": ["es", "fr"]
}

Tested BCP-47 cultures

Language tags follow BCP-47 (es, pt-BR, zh-Hans). Other BCP-47 codes also work. Casing does not matter; the CLI stores the canonical name (PT-br pt-BR). The CLI has been tested with these popular codes:

CodeLanguage
esSpanish
frFrench
deGerman
itItalian
nlDutch
jaJapanese
koKorean
zh-HansChinese (Simplified)
pt-BRPortuguese (Brazil)
arArabic
hiHindi
ruRussian

A code that is not BCP-47 (foo, english, 123, es_MX) does not create a localized .resx. The CLI exits 2 and prints the error and the reason. If a BCP-47 code fails to translate or is rejected, open an issue.

Usage and sample results

Each sample is a typical report from a host with gaps. A complete culture set prints 0 missing / 0 stale / 0 placeholder and exits 0. Completeness is not correctness — review with a native speaker before you ship. There is no --fix; the agent writes the .resx files.

Setup

nuvloc init

Check i18n.json and install /nuvloc.status and /nuvloc.translate

Usage

nuvloc init --configfile i18n.json --agent cursor
nuvloc init --configfile i18n.json --agent copilot
nuvloc init --configfile i18n.json --ci --force

Sample result

Checked /…/i18n.json
Platform maui; source Resources/Strings/AppResources.resx; languages es, fr
Agent cursor (Cursor)
 wrote .nuvloc/rules.md
 wrote .nuvloc/reference/dotnet-resx.md
 wrote .cursor/skills/nuvloc-status/SKILL.md
 wrote .cursor/skills/nuvloc-translate/SKILL.md

Next: /nuvloc.status then /nuvloc.translate
NuvLoc does not give a 100% guarantee on translated text. Agent wording can be inaccurate or culturally off. Review every culture file with a native speaker of that language before you ship. Coverage and placeholder checks only prove completeness, not correctness.

Does not translate. --force overwrites skill files, never culture .resx. Omit --agent on an interactive terminal for the Spec Kit picker. --ci requires --agent. languages must be BCP-47; invalid codes exit 2.

nuvloc update

Refresh skills and .nuvloc/reference on an existing NuvLoc app

Usage

nuvloc update
nuvloc update --configfile i18n.json --force

Sample result

 wrote .nuvloc/rules.md
 wrote .nuvloc/reference/dotnet-resx.md
 wrote .cursor/skills/nuvloc-status/SKILL.md
 wrote .cursor/skills/nuvloc-translate/SKILL.md
NuvLoc does not give a 100% guarantee on translated text. Agent wording can be inaccurate or culturally off. Review every culture file with a native speaker of that language before you ship. Coverage and placeholder checks only prove completeness, not correctness.

Leaves culture .resx files and i18n.json alone. Reinstalls skills for the agent already detected in the tree.

nuvloc agent add

Install slash commands for a second coding agent

Usage

nuvloc agent add copilot
nuvloc agent add claude --path ./FieldApp

Sample result

 wrote .github/skills/nuvloc-status/SKILL.md
 wrote .github/skills/nuvloc-translate/SKILL.md
NuvLoc does not give a 100% guarantee on translated text. Agent wording can be inaccurate or culturally off. Review every culture file with a native speaker of that language before you ship. Coverage and placeholder checks only prove completeness, not correctness.

Same Spec Kit ids as Nuvyn (cursor, copilot, claude, gemini, codex, windsurf, …). Unknown ids exit 2.

nuvloc version

Print the installed CLI version

Usage

nuvloc version

Sample result

1.1.2

Coverage

nuvloc plan

Missing / stale / extra / placeholder worklist for the agent

Usage

nuvloc plan --configfile i18n.json
nuvloc plan --configfile i18n.json --format json
nuvloc plan --configfile i18n.json --lang es --lang fr

Sample result

Source: Resources/Strings/AppResources.resx

es: 2 current, 1 missing, 0 stale, 0 placeholder, 0 extra
 missing ItemsLeft

fr: 0 current, 3 missing, 0 stale, 0 placeholder, 0 extra
 missing Save
 missing Cancel
 missing ItemsLeft

NuvLoc does not give a 100% guarantee on translated text. Agent wording can be inaccurate or culturally off. Review every culture file with a native speaker of that language before you ship. Coverage and placeholder checks only prove completeness, not correctness.

/nuvloc.translate runs this (JSON), writes sibling culture files, then nuvloc check --write-cache. There is no nuvloc translate CLI command. --lang must be one of the configured BCP-47 codes; a code missing from i18n.json exits 2.

nuvloc status

Coverage table per language. Does not translate

Usage

nuvloc status --configfile i18n.json
nuvloc status --configfile i18n.json --format json
nuvloc status --configfile i18n.json --lang es

Sample result

Source: Resources/Strings/AppResources.resx

es: 2 current, 1 missing, 0 stale, 0 placeholder, 0 extra
 missing ItemsLeft

fr: 3 current, 0 missing, 0 stale, 0 placeholder, 0 extra

NuvLoc does not give a 100% guarantee on translated text. Agent wording can be inaccurate or culturally off. Review every culture file with a native speaker of that language before you ship. Coverage and placeholder checks only prove completeness, not correctness.

/nuvloc.status runs this and explains the counts. Complete files are complete — not correct. Human and JSON share the same reporter as plan. --lang must be one of the configured BCP-47 codes.

nuvloc check

CI gate: exit 1 on missing, stale, or broken placeholders

Usage

nuvloc check --configfile i18n.json --ci
nuvloc check --configfile i18n.json --write-cache
nuvloc check --configfile i18n.json --format human

Sample result

Source: Resources/Strings/AppResources.resx

es: 2 current, 1 missing, 0 stale, 0 placeholder, 0 extra
 missing ItemsLeft

NuvLoc does not give a 100% guarantee on translated text. Agent wording can be inaccurate or culturally off. Review every culture file with a native speaker of that language before you ship. Coverage and placeholder checks only prove completeness, not correctness.

--ci forces JSON. --write-cache records source hashes for present keys after a pass. Completeness is not correctness. --lang must be one of the configured BCP-47 codes.

It never

  • Never calls OpenAI, Azure, or any vendor translation API. No API key.
  • Never binds strings to the UI — no UseI18n, markup extension, or XAML rewrite.
  • Never ships a nuvloc translate CLI command — translation is /nuvloc.translate.
  • Never writes WinUI / Uno PRI .resw folders under Strings/{lang}/.
  • Never writes a localized .resx for a non-BCP-47 language code.
  • Never guarantees wording or cultural correctness.
  • Never phones home.
  • Never publishes or pushes NuGet packages from a local clone.
  • Never adds NuvyntraLabs.NuvLoc.Cli as a PackageReference.

CI

nuvloc check --configfile i18n.json --ci

Visual Studio Multilingual App Toolkit, ResXResourceManager, and Crowdin / Phrase are the usual alternatives. They either stay in the IDE, manage a TMS, or take a vendor API key. NuvLoc diffs sibling .resx files and lets the coding agent write the cultures.

Use a plugin instead when

Release notes

  • 1.1.2. Reject invalid language codes in i18n.json and --lang (BCP-47 only, such as es or pt-BR). Canonicalize culture names (PT-br → pt-BR). Underscores fail with a hyphen hint. --lang not in i18n.json exits 2.
  • 1.1.1. CI matches other Labs CLIs: version alignment → NuGet check → tests → pack → publish (NUGET_KEY_NUVLOC only). PackageProjectUrl is this toolkit page.
  • 1.1.0. platform accepts maui, wpf, winui, avalonia, and uno. Shared .nuvloc/reference/dotnet-resx.md. WinUI / Uno PRI .resw remains out of scope.
  • 1.0.0. nuvloc init checks i18n.json and installs /nuvloc.status and /nuvloc.translate for the Nuvyn Spec Kit agent set.
  • 1.0.0. plan / status / check diff sibling .resx culture files. No vendor API key. Native-speaker review required.

Discussion

Comment on NuvLoc. The thread lives on this component's GitHub repository (nuvyntralabs/NuvLoc). Sign in with GitHub — Giscus uses Discussions, Utterances uses Issues.