Runic.Translations
0.8.0
dotnet add package Runic.Translations --version 0.8.0
NuGet\Install-Package Runic.Translations -Version 0.8.0
<PackageReference Include="Runic.Translations" Version="0.8.0" />
<PackageVersion Include="Runic.Translations" Version="0.8.0" />
<PackageReference Include="Runic.Translations" />
paket add Runic.Translations --version 0.8.0
#r "nuget: Runic.Translations, 0.8.0"
#:package Runic.Translations@0.8.0
#addin nuget:?package=Runic.Translations&version=0.8.0
#tool nuget:?package=Runic.Translations&version=0.8.0
Runic.Translations
Run compiled translations in .NET applications with immutable locale snapshots, typed formatting, fallback, and atomic locale switching. The runtime is UI-framework independent, reflection-free, and compatible with NativeAOT.
Install
dotnet add package Runic.Translations --version <VERSION>
Replace <VERSION> with the current version shown on NuGet. The package targets .NET 10. For generated catalogs, install Runic.Translations.Build at the same exact version; it owns the generator, catalog item mapping, and optional non-C# artifacts.
Use a generated catalog
Given the project template's starter catalog with code.className set to AppText, the generator creates registration and typed accessors. text.Messages is the readable surface and names each message by its flattened key, so the starter message application.title is application_title. The encoded r_<hex> members stay available as the stable machine-facing contract. Each encoded segment is r_ followed by the hexadecimal UTF-8 bytes of its NFC-normalized text, and the encoded segments are joined with _.
using Example.Translations;
using Runic.Translations;
ITranslationManager manager = await AppTextCatalog.CreateManagerAsync(
initialLocale: "en");
var text = new AppText(manager);
Console.WriteLine(text.Messages.application_title);
await manager.SetLocaleAsync("de");
Console.WriteLine(text.Messages.application_title);
Each successful locale change replaces the complete immutable snapshot. Reads through manager.Current do not observe a partially updated catalog.
When to choose this package
Choose Runic.Translations for application runtime behavior: generated catalog data, locale resolution, formatting, structured content, translation references, and optional verified external packs. Choose Runic.Translations.Tooling when building an editor, compiler host, or workspace tool.
External packs are untrusted until their artifact version, catalog, locale, contract fingerprint, keys, argument contracts, and limits have been verified. Applications that require authenticity must also supply an integrity verifier; schema validation alone does not establish provenance.
Generated RMF2 catalogs use v5 pack factories and strict version/profile dispatch. A matching fingerprint demonstrates generated-contract compatibility; it is not a signature or authenticity proof. Unsupported artifact, grammar, profile, and ABI versions fail explicitly.
Compatibility and status
This package targets .NET 10. Before 1.0 a minor release may contain breaking changes, each listed with upgrade steps in the release notes (see Versions before 1.0). Keep the runtime and generated source on the same Runic Translations release; runtime ABI mismatches fail explicitly.
Generated code calls the runtime through the Runic.Translations.Generated namespace: the CompiledRmf2* message model, TranslationsCompatibility and GeneratedCatalogSupport. These types are binary compatible for code that an earlier release of the same major generated, but they are not application API: their source may change in a minor, and they are marked [EditorBrowsable(Never)]. TextArgumentFormat.Fixed0–Fixed6/Percent0–Percent4 are likewise hidden. Generated readable surfaces implement IReadableMessages.
Open and closed sets: the markup bindings (InlineLinkBinding, InlineActionBinding, InlineIconBinding) are a closed set, so a switch over them is exhaustive. TranslationPackFailureReason, TranslationReferenceDiagnosticReason and the RMF2 document block names are open: handle a value you do not know.
- Runtime and generated C# example
- NativeAOT example
- RMF2 project guide
- External translation pack contract
- Issues and support
Licensed under the MIT License. See Third-Party Notices for bundled data attribution.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. 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. |
-
net10.0
- No dependencies.
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Runic.Translations:
| Package | Downloads |
|---|---|
|
Runic.Translations.Wpf
WPF inline and document rendering for compiled RMF2 messages. |
|
|
Runic.Translations.CommandLine
Translates Runic.CommandLine help, errors and faults with Runic Translations, with built-in English and German text. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.8.0 | 325 | 10/22/2026 |
| 0.7.0-preview.4 | 505 | 10/17/2026 |
| 0.7.0-preview.3 | 229 | 10/17/2026 |
| 0.7.0-preview.2 | 218 | 10/15/2026 |
| 0.7.0-preview.1 | 169 | 10/14/2026 |
| 0.6.0-preview.7 | 68 | 10/12/2026 |
| 0.6.0-preview.5 | 820 | 10/9/2026 |
| 0.6.0-preview.4 | 369 | 10/8/2026 |
| 0.6.0-preview.3 | 463 | 10/7/2026 |
| 0.6.0-preview.2 | 535 | 10/7/2026 |
| 0.6.0-preview.1 | 1,146 | 10/5/2026 |
| 0.5.0-preview.3 | 65 | 10/1/2026 |
| 0.5.0-preview.2 | 75 | 9/25/2026 |
| 0.4.0-preview.1 | 74 | 9/22/2026 |
| 0.3.0-preview.1 | 88 | 9/11/2026 |
| 0.2.0-preview.1 | 90 | 9/9/2026 |