nresx.Core
1.0.0
dotnet add package nresx.Core --version 1.0.0
NuGet\Install-Package nresx.Core -Version 1.0.0
<PackageReference Include="nresx.Core" Version="1.0.0" />
<PackageVersion Include="nresx.Core" Version="1.0.0" />
<PackageReference Include="nresx.Core" />
paket add nresx.Core --version 1.0.0
#r "nuget: nresx.Core, 1.0.0"
#:package nresx.Core@1.0.0
#addin nuget:?package=nresx.Core&version=1.0.0
#tool nuget:?package=nresx.Core&version=1.0.0
nresx
One command-line tool for every localization file format. Read, write, convert, and validate translation resources across 13 formats, on Windows / Linux / macOS, from any shell.
# a translator sent back a .po - fold it into your app's locale files
nresx convert strings.uk.po -f json
# gate CI on localization health: drift, duplicates, untranslated entries
nresx validate "locales/strings.*.json" -r --warnings-as-errors
Why nresx
- Format-agnostic. po, json, yaml, Android, iOS, resx, xliff and more - one model, one command set, any-to-any conversion.
- CI-friendly by design. Deterministic output, documented
exit codes, errors on stderr,
validateas a drop-in pipeline gate. - Batch-first. Every command accepts wildcards and
-rto sweep whole directory trees in one call. - Scriptable and embeddable. The same operations from any shell (Windows /
Linux / macOS, no .NET visible once installed) or from C# via
nresx.Core- a singlenetstandard2.0build that runs everywhere from .NET Framework 4.6.1 to the latest .NET, Unity included.
Install
Standalone CLI binary
The nresx command-line tool as a single self-contained executable - nothing
to install first, no .NET required. Download, unzip, run. Grab it from the
latest release:
| Platform | Download |
|---|---|
| Windows (x64) | nresx-win-x64.zip |
| Linux (x64) | nresx-linux-x64.zip |
| macOS (Apple Silicon) | nresx-osx-arm64.zip |
After extracting, add the directory to your PATH so nresx is callable from any shell:
<details><summary>Windows</summary>
# Extract to C:\Tools\nresx, then:
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Tools\nresx", "User")
# Restart your shell. Confirm:
nresx --version
</details>
<details><summary>Linux / macOS</summary>
# Extract to ~/.local/bin (already on PATH on most distros) or /usr/local/bin
unzip nresx-linux-x64.zip -d ~/.local/bin/
chmod +x ~/.local/bin/nresx
nresx --version
Linux runtime dependency: requires libicu (standard .NET globalization library). Most desktop distros (Ubuntu, Debian, Fedora) include it by default. On minimal containers / slim server images, install it:
# Debian / Ubuntu
sudo apt-get install -y libicu-dev
# Fedora / RHEL / Rocky
sudo dnf install -y libicu
# Alpine is not supported - the binary needs glibc, not musl
On macOS, Gatekeeper may quarantine the binary on first run. Remove the quarantine flag:
xattr -d com.apple.quarantine ~/.local/bin/nresx
</details>
CLI via dotnet tool
If you already have the .NET SDK:
dotnet tool install -g nresx
nresx --help
.NET library
The same engine as a package, for use from C# code:
dotnet add package nresx.Core
Planned channels
Coming with the 1.0 release: Chocolatey (choco install nresx) and
Scoop (scoop install nresx). Homebrew is planned for a later release.
Supported formats
Ordered roughly by ecosystem reach. Click the heading above for per-format details: what's preserved, what's lossy, and format-specific quirks. More formats are on the roadmap.
| Format | Extensions | Typical use |
|---|---|---|
| JSON | .json |
Web apps (i18next, vue-i18n) |
| .NET resx / resw | .resx .resw |
.NET / Windows apps |
| YAML | .yaml .yml |
Rails, config-style locales |
| Gettext PO | .po |
The classic translator format |
| Android strings | .xml |
Android apps |
| iOS strings | .strings |
iOS / macOS apps |
| Java properties | .properties |
Java apps |
| XLIFF 1.2 | .xlf .xliff |
Translation interchange standard |
| CSV / TSV | .csv .tsv |
Spreadsheets, translator exchange |
| Excel | .xlsx |
Translator-friendly handoff |
| Flutter ARB | .arb |
Flutter apps |
| INI | .ini |
Desktop / legacy config |
| Plain text | .txt |
Simple key=value lists |
Quick start
CLI
# Convert a single file into another format (placed next to the source)
nresx convert strings.po -f json
# Convert every .resx in the current directory tree into a .yaml sibling
nresx convert *.resx -f yaml -r
# Show format, culture, and element count for a file
nresx info strings.json
# Print every key=value pair (use -t to customize the row template)
nresx list strings.json
# Surface drift, duplicates, and empty entries across language siblings
# (non-zero exit on errors; --warnings-as-errors makes it strict)
nresx validate strings.*.json -r
Full command reference.
.NET library
using nresx.Core;
// Load
var file = new ResourceFile("strings.resx");
foreach (var element in file.Elements)
Console.WriteLine($"{element.Key} = {element.Value}");
// Mutate
file.Elements.Add("hello", "Hello, world!");
// Save as a different format
file.Save("strings.po", ResourceFormatType.Po);
Async overloads are available: ResourceFile.LoadAsync and file.SaveAsync
both accept a CancellationToken.
Docs
- Getting started - install, first conversions, library walkthrough.
- Command reference - every CLI command, flags, exit codes.
- Format reference - per-format roundtrip and quirks.
- API reference - full
nresx.CoreAPI. - Recipes - translator handoff, CI validation, batch ops.
- Worked examples - WinForms, web, and CI project shapes.
Feedback and contributing
- Found a bug? Open an issue.
- Question or idea? Start a discussion.
- Want to contribute a fix or feature? See CONTRIBUTING.md -
good first issuelabels mark approachable entry points.
License
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- MiniExcel (>= 1.35.0)
- Newtonsoft.Json (>= 13.0.4)
- YamlDotNet (>= 11.1.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 97 | 7/7/2026 |