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.
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.
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.
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.
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:
Code
Language
es
Spanish
fr
French
de
German
it
Italian
nl
Dutch
ja
Japanese
ko
Korean
zh-Hans
Chinese (Simplified)
pt-BR
Portuguese (Brazil)
ar
Arabic
hi
Hindi
ru
Russian
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
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
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
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.
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.
CLI
dotnet tool
localization
i18n
.resx
agentic
MAUI
WPF
WinUI
Avalonia
Uno
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.