Bit.ResxTranslator
9.11.1
dotnet tool install --global Bit.ResxTranslator --version 9.11.1
dotnet new tool-manifest
dotnet tool install --local Bit.ResxTranslator --version 9.11.1
#tool dotnet:?package=Bit.ResxTranslator&version=9.11.1
nuke :add-package Bit.ResxTranslator --version 9.11.1
Bit.ResxTranslator
Bit.ResxTranslator is a .NET global tool that automates the translation of .resx
resource files into multiple languages using OpenAI or Azure OpenAI Large Language Models (LLMs).
It efficiently identifies missing translations in your target language files and generates them using the configured LLM, while preserving any existing manual translations.
Key Features
- LLM-Powered Translation: Uses OpenAI or Azure OpenAI for translating
.resx
entries. - Preserves Existing Translations: Only adds missing translations to target
.resx
files, leaving existing ones untouched. - Automatic File Generation: Creates target language
.resx
files (e.g.,AppStrings.fr.resx
) if they don't exist based on your default language file (e.g.,AppStrings.fr.resx
). - Flexible Configuration: Configure languages,
.resx
file paths (using glob patterns), and LLM provider details viaBit.ResxTranslator.json
. - .NET Configuration: Supports API keys via JSON or standard environment variables (e.g.,
OpenAI__ApiKey
,AzureOpenAI__ApiKey
). - Easy Installation: Installs as a .NET global tool.
Installation
dotnet tool install --global Bit.ResxTranslator
Configuration
Bit.ResxTranslator requires a configuration file named Bit.ResxTranslator.json
located in the directory where you execute the bit-resx-translate
command.
This JSON file defines the source and target languages, the location of your resource files, and the connection details for the LLM service (OpenAI or Azure OpenAI).
Example Bit.ResxTranslator.json
:
{
"DefaultLanguage": "en",
"DefaultLanguage__Comment": "Required: .NET culture's name, en, en-US for example.",
"SupportedLanguages": [ "nl", "fa", "sv", "hi", "zh", "es", "fr", "ar", "de" ],
"SupportedLanguages__Comment": "Required: An array of .NET culture names.",
"ResxPaths": [ "src/**/*.resx" ],
"ResxPaths__Comment": "Required: An array of glob patterns to find your *base* .resx files",
"OpenAI": {
"Model": "gpt-4.1-mini",
"Endpoint": "https://models.inference.ai.azure.com",
"Endpoint__Comment": "Required if using OpenAI: API Key. Can be set here OR via Environment Variable [OpenAI__ApiKey]",
"ApiKey": null
},
"AzureOpenAI": {
"Model": "gpt-4.1-mini",
"Endpoint": "https://yourResourceName.openai.azure.com/openai/deployments/yourDeployment",
"Endpoint__Comment": "Required if using Azure: API Key. Can be set here OR via Environment Variable [AzureOpenAI__ApiKey]",
"ApiKey": null,
"ApiKey__Comment": "Required if using Azure: API Key. Can be set here OR via Environment Variable [AzureOpenAI__ApiKey]"
}
}
Security Note: It is highly recommended to provide your ApiKey using environment variables (OpenAI__ApiKey
or AzureOpenAI__ApiKey
) instead of hardcoding it directly in the Bit.RexsTranslator.json
file,
especially if this file is checked into version control. The tool uses standard .NET configuration practices, meaning environment variables will override values present in the JSON file.
Usage
bit-resx-translate
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net9.0 is compatible. 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. |
This package has no dependencies.
Version | Downloads | Last Updated |
---|---|---|
9.11.1 | 431 | 7/24/2025 |
9.11.1-pre-01 | 423 | 7/24/2025 |
9.11.0 | 469 | 7/22/2025 |
9.11.0-pre-04 | 428 | 7/21/2025 |
9.11.0-pre-03 | 182 | 7/20/2025 |
9.11.0-pre-02 | 135 | 7/16/2025 |
9.11.0-pre-01 | 145 | 7/13/2025 |
9.10.0 | 122 | 7/4/2025 |
9.10.0-pre-01 | 159 | 7/2/2025 |
9.9.2 | 196 | 6/14/2025 |
9.9.1 | 316 | 6/9/2025 |
9.9.1-pre-01 | 223 | 6/9/2025 |
9.9.0 | 134 | 6/7/2025 |
9.9.0-pre-03 | 183 | 6/5/2025 |
9.9.0-pre-02 | 174 | 6/3/2025 |
9.9.0-pre-01 | 131 | 6/3/2025 |
9.8.0 | 164 | 5/30/2025 |
9.8.0-pre-08 | 165 | 5/29/2025 |
9.8.0-pre-07 | 159 | 5/27/2025 |
9.8.0-pre-06 | 171 | 5/23/2025 |
9.8.0-pre-05 | 148 | 5/22/2025 |
9.8.0-pre-04 | 154 | 5/19/2025 |
9.8.0-pre-03 | 147 | 5/18/2025 |
9.8.0-pre-02 | 117 | 5/17/2025 |
9.8.0-pre-01 | 248 | 5/14/2025 |
9.7.4 | 332 | 5/13/2025 |
9.7.4-pre-04 | 230 | 5/13/2025 |
9.7.4-pre-03 | 226 | 5/12/2025 |
9.7.4-pre-02 | 121 | 5/10/2025 |
9.7.4-pre-01 | 194 | 5/6/2025 |
9.7.3 | 160 | 5/5/2025 |
9.7.3-pre-05 | 146 | 5/5/2025 |
9.7.3-pre-04 | 147 | 5/5/2025 |
9.7.3-pre-03 | 155 | 5/5/2025 |
9.7.3-pre-02 | 90 | 5/3/2025 |
9.7.3-pre-01 | 149 | 5/1/2025 |
9.7.2 | 132 | 4/26/2025 |
9.7.1 | 109 | 4/26/2025 |
9.7.1-pre-03 | 203 | 4/24/2025 |
9.7.1-pre-01 | 146 | 4/24/2025 |
9.7.0 | 181 | 4/22/2025 |
9.7.0-pre-12 | 179 | 4/22/2025 |
9.7.0-pre-11 | 176 | 4/22/2025 |
9.7.0-pre-10 | 182 | 4/21/2025 |
9.7.0-pre-09 | 172 | 4/21/2025 |