> ## Documentation Index
> Fetch the complete documentation index at: https://hyperlocalise.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Translate .NET RESX resource files with Hyperlocalise

> Translate text resources in .NET RESX files while preserving XML metadata.

.resx files store .NET resources in XML. Hyperlocalise translates supported string resources; preserve non-text application resources according to the behavior below.

Supported extensions: `.resx`.

## Source file

Save this example as `locales/en-US/messages.resx`.

```xml theme={null}
<?xml version="1.0" encoding="utf-8"?>
<root>
    <data name="home.title" xml:space="preserve">
        <value>Welcome</value>
        <comment>Home screen heading</comment>
    </data>
</root>
```

## Configure your files

Use this `i18n.yml` for the example, or add its file mapping to your existing bucket.
See [path templates](/cli/configuration/path-templates) for other layouts.

```yaml theme={null}
locales:
    source: en-US
    targets:
        - es-ES

buckets:
    messages:
        files:
            - from: locales/en-US/messages.resx
              to: locales/{{target}}/messages.resx

llm:
    profiles:
        default:
            provider: openai
            model: gpt-5.2
```

## Translate

[Install the CLI](/cli/getting-started/install) and set `OPENAI_API_KEY` in your
project's `.env.local` or shell. You can also configure another
[AI provider](/cli/providers/overview).

```bash theme={null}
hyperlocalise run --dry-run
hyperlocalise run
```

The dry run previews the work. The second command writes translations to the
configured target path and updates the lockfile.

## Behavior and limitations

* Uses the generic XML parser for text resources: `data` names identify their `value` text.

* Comments, attributes, `metadata`, and `resheader` elements are preserved.

* Use text-only resources. Mixed-content XML is unsupported; do not treat support for text RESX as support for arbitrary serialized .NET objects.

* Changed CDATA values are written as escaped text. See [XML](/cli/reference/formats/xml) for shared behavior.

## Next steps

* [Check translations](/cli/commands/check) before committing generated files.
* [Local translation workflow](/cli/workflows/local-generation) explains repeat runs.
* [Browse all file formats](/cli/reference/formats/overview).

## Related formats

* [XML localization](/cli/reference/formats/xml)
* [Java .properties](/cli/reference/formats/java-properties)
