Translate Your App – Business help

Translate Your App– Business: Help

Help and documentation

Everything runs in your browser. This page explains each step, what the app does with your files, and what to do when something goes wrong.

What it is

Translate Your App – Business translates the resource files of .NET, .NET MAUI, WPF, WinUI and Windows applications. A resource file (.resx or .resw) holds the text your application shows, one entry per string. The app reads the file in your source language, keeps a work file per target language in the industry-standard XLIFF format, sends each string to your own Azure AI Translator resource, and writes the approved translations back into a resource file for each language, exactly where your build expects it.

It is the browser edition of our Windows tool, Translate Resx/Resw. Both read and write the same files, so a project can move between them.

What you need: a current web browser, a project folder with at least one .resx or .resw file, and an Azure AI Translator resource in your own Microsoft Azure subscription (free tier available; see Create your Azure resource).

Getting started

  1. Open the app at www.freytag.us/app/translate-your-app/.
  2. Open your project folder. In Chrome or Edge, click Choose folder… and pick the folder of your application. The browser asks once for permission to read and write it. In Firefox or Safari, click Select folder…; the files are read into memory and you download the results at the end. You can also drag a folder onto the page, or click Open demo project to explore with a sample.
  3. Create the project. If the folder has no apptranslator.atproj file yet, choose the source resource file (the one without a language suffix, for example Resources/Strings.resx), the source language code (usually en), the target languages, and click Create project and write work files. The app writes the settings file and one XLIFF work file per language into an xliff folder next to it.
  4. Sync whenever you change your source strings. Sync reads the resource file again, adds new strings, removes deleted ones, and marks strings whose text changed as "source changed" so they are translated again and reviewed.

The steps across the top of the app follow this order: Project, Translate Settings, Translate, Worksheet, Check & Export.

Create your Azure AI Translator resource

Azure AI Translator is Microsoft's machine-translation service. You create it once in your own Azure subscription; the app only uses it.

  1. Sign in to the Azure portal. If you have no Azure account, create one first; Microsoft offers a free account.
  2. Choose Create a resource, search for Translator, and click Create.
  3. Pick a subscription and a resource group (a folder for related Azure things), a region (for example East US), a name, and a pricing tier. F0 is free: up to two million characters a month, and it does not expire. S1 is pay as you go for larger volumes.
  4. After it is created, open the resource and choose Keys and Endpoint. Copy Key 1 and note the Region shown there. If the region is "global," leave the region box in the app empty.
Type the region in full. Azure wants the long name, such as southcentralus, not a short form such as scus. This matters more than it sounds: Azure refuses a short form with exactly the same message it uses for a wrong key, so you can spend an afternoon regenerating a key that was never the problem. The app now checks the region as you type and tells you the long name, but the value on Keys and Endpoint is always the one to copy.
Keep your key secret. Anyone who has it can translate on your account. Do not paste it into email or chat. If it leaks, open Keys and Endpoint in the portal and click Regenerate Key 1; the old key stops working at once.

The app translates at a pace that fits the free tier (about 33,000 characters a minute). If you chose S1 or higher, select that tier in Translate Settings and the app sends as fast as the service allows.

Translate Settings

SettingWhat it does
Key, Region, EndpointYour Translator credentials. The region must be the full name from Keys and Endpoint, such as southcentralus; leave it empty for a global resource. Leave the endpoint blank unless Microsoft gave your resource its own address. The app accepts an endpoint only at a Microsoft Translator address, so that your key cannot be sent anywhere else, including to us. Tick Remember these settings until this browser tab closes to keep them while you work; they are held in the tab's session storage and are gone when the tab closes.
Pricing tierF0 paces requests to the free tier's limit; paid tiers are not paced.
Test connectionTranslates the word "Hello" into French to prove the key, region and endpoint work.
Protect placeholders and markupOn by default. Each string is sent as HTML with {0}, %s and tags such as <b> marked "do not translate," so the service leaves them alone. Turn it off for strings that contain literal angle brackets the service misreads; the checks still catch any damage.
Reuse approved translationsLooks up the translation memory before calling Azure. Approved strings are added to the memory whenever you save the worksheet, whether or not this is on.
Line endsWindows (CRLF) matches the Windows app. Choose Keep whatever each existing file uses for projects that use Unix line ends.
Quality checksEach check can be an error (blocks export), a warning, an info note, or off. See Checks.
GlossaryTerms that must be translated a fixed way, per language, and product names that must not be translated at all. Terms are pinned in every Azure request and verified in every result. Saved to glossary.json.
Translation memoryEvery approved translation, keyed by language pair and source text. Saved to translation-memory.json. Safe to keep in version control.

Click Save project settings to write your choices into apptranslator.atproj. The key is never written to that file.

Translate

Estimate counts the strings and characters that will be sent, without contacting Azure. Translate now sends them, language by language, in batches of at most 25 strings and 10,000 characters. Strings found in the translation memory are filled from memory and not sent. Everything that comes back is marked Translated – Needs Review; nothing is exported until a person approves it. You can stop at any time; finished batches are kept.

The progress panel shows how many characters Azure has counted so far. Microsoft bills characters above the free tier.

Worksheet

The worksheet shows one work file at a time: every string's key, source text, translation, status, developer note, length limit, and any findings. Edit a translation directly. Set its status with the drop-down:

StatusMeaning
UntranslatedNo translation yet.
Translated – Needs ReviewA machine, the memory, or an import produced it. A person has not checked it.
ReviewedA person checked it. It is exported and added to the memory.
FinalSigned off for release. Also exported and remembered.

Filters show only untranslated strings, strings needing review, strings whose source changed, or strings with findings. Mark all "needs review" as Reviewed approves a whole file after you have read it. Click Save to write the work file; unsaved edits are marked with a blue border.

A developer can add a length limit or a screenshot to a string inside its comment in the resource file: [maxlength:40] and [screenshot:shots/home.png]. The limit is checked; the note travels to the worksheet.

Checks

CheckDefaultWhat it finds
placeholderserrorA {0}, {name}, %s or %1$d missing from, or added to, the translation. A missing placeholder crashes the application at run time.
markuperrorA tag such as <b> missing or added.
untranslatederrorA string with no translation.
translated-needs-reviewerrorA string nobody has reviewed yet.
whitespacewarningLeading or trailing spaces differ from the source.
lengthwarningLonger than its [maxlength:N] limit, or more than three times the source length (a sign the service added text).
glossarywarningA required term is missing, or a do-not-translate term was changed.

Errors block export. Click a key in the findings table to jump to it in the worksheet.

Export and your files

Export writes Reviewed and Final strings into the translated resource file for each language: Strings.de.resx next to Strings.resx, or Strings/de/Resources.resw beside Strings/en-US/Resources.resw. Entries you did not change keep their exact bytes, so your version-control diffs show only real changes. A Testing build option also exports strings still needing review, for layout testing only.

The app reads and writes these files in your project folder:

FilePurpose
apptranslator.atprojProject settings: files, languages, options. No secrets.
xliff/Name.de.xliffOne work file per source file and language, with every string's status and history.
glossary.jsonYour terminology.
translation-memory.jsonApproved translations for reuse.
Name.de.resxThe translated resource file your build uses.
Name.qps-ploc.resxThe pseudo-localization test language, if you generated it.

In Chrome and Edge the files are saved in place. In other browsers, Check & Export offers a zip of every changed file; unzip it over your project folder.

Browsers

BrowserRead a folderSave files in placeDownload a zip
Chrome (current)YesYesYes
Microsoft Edge (current)YesYesYes
Firefox (current)YesNoYes
Safari (current)YesNoYes

The app is tested with the current versions of these browsers on Windows and macOS. It does not run in Internet Explorer.

Privacy and your key

  • Your resource files are read and written on your computer. They are not uploaded anywhere.
  • The text of each string you translate is sent to your Azure AI Translator resource, and nowhere else. Microsoft's handling of that text is described in its data, privacy and security page for Azure AI Translator.
  • Your key is held in the browser tab's memory (and, if you tick the box, in the tab's session storage). It is never sent to Freytag & Company and never written to your project files.
  • After the page loads, the app makes no requests to www.freytag.us. The app page loads no advertising, analytics or translation widgets.
  • Read the full privacy and security policy.

Sign in with Microsoft

When enabled, Sign in with Microsoft lets you use your work account instead of a key. The app obtains a short-lived token from Microsoft Entra ID and presents it to your Translator resource; no key is typed into the browser. To use it:

  1. In the Azure portal, open your Translator resource, choose Access control (IAM), and give your account the Cognitive Services User role. Role changes can take up to five minutes to apply.
  2. Copy the resource's Resource ID from its Properties page into the app.
  3. Fill in the Region box as well, using the full name from Keys and Endpoint, such as southcentralus. Microsoft requires the region for every resource that is not global, whether you sign in or use a key. Leave it empty only for a global resource.
  4. Click Sign in with Microsoft and choose your work account.

If your organization requires an administrator to approve new applications, the app shows a link your Microsoft Entra administrator can open to grant consent for everyone in your organization. Sign-in is not available for personal Microsoft accounts.

If the sign-in button is not shown, this edition is running with keys only.

Working with the Windows app

The browser edition and Translate Resx/Resw for Windows use the same project file, work files, glossary and memory, and produce byte-identical files. Open the same folder in either. The Windows app adds features that need a desktop: a built-in local language model, Azure Key Vault sign-in, import of translations from other tools, a context builder, and a command-line tool for build servers.

Troubleshooting

"Enter your Azure AI Translator key"
Go to Translate Settings and enter the key, or sign in with Microsoft.
"Azure Translator answered HTTP 401"
Check the region before you touch the key. Azure sends this same message for a wrong key, for a region that does not match the resource, and for a regional resource used with no region at all. The commonest cause is a region written short, such as scus instead of southcentralus. Copy Key 1 and the region from Keys and Endpoint in the Azure portal, and use the region exactly as shown. For a global resource leave the region empty. If the key and region are both right, check that the resource is a Translator resource: a multi-service Cognitive Services key works only against its own endpoint address.
"The region is ... not ..." or "This app will not send your key to ..."
These come from the app, not from Microsoft, and nothing has been sent. The first means the region was written short; use the long name the message gives. The second means the endpoint box holds an address that is not a Microsoft Translator one. Your key is only ever sent to addresses ending in cognitive.microsofttranslator.com, api.cognitive.microsoft.com or cognitiveservices.azure.com. Leave the box blank for the usual endpoint. Azure Government and other sovereign clouds are not supported.
"Azure Translator answered HTTP 403"
The free tier's monthly quota is used up, or your subscription is disabled. Check the resource in the Azure portal.
"HTTP 429" or slow progress
The service asked the app to slow down. The app waits and retries by itself. Choose the correct pricing tier in Translate Settings.
"Azure Translator request failed" the moment you click
The browser blocked the call before it left. A company proxy, a browser extension, or a strict privacy setting can do this. Try another browser or network. If your Translator resource is locked to a virtual network, it cannot be reached from a browser; use the Windows app on a machine inside that network.
"XLIFF work file not found"
Go to Project and click Sync work files.
"XML error at offset …"
A resource or work file is not well-formed XML. Open it in an editor and fix the line near that position.
The folder picker does not appear
Your browser does not support in-place saving. Use Select folder… instead and download the zip when you finish.
A language I need is not in the list
The list is the set of languages both Azure AI Translator and the Microsoft Store accept. To add another code, edit extraLanguages in apptranslator.atproj.

Still stuck? Email team@freytag.us or call (703) 579-5377.

Glossary of terms

Resource file
A .resx or .resw XML file holding an application's strings.
XLIFF
XML Localization Interchange File Format, the standard exchange file for translations. The app's work files.
Placeholder
A marker such as {0} or %s that the application replaces with a value at run time.
Translation memory
A store of approved translations, reused before any machine translation.
Glossary
Required terminology, per language, plus terms that must not be translated.
Pseudo-localization
A generated test language (qps-ploc) with accented letters, brackets and extra length, used to find layout problems.
Azure AI Translator
Microsoft's machine-translation service, used through a resource in your own subscription.
Microsoft Entra ID
Microsoft's sign-in service for work accounts, formerly Azure Active Directory.
Language code
A short identifier such as de or pt-br (the BCP-47 standard).