All files use the Name.<sourceLocale>.<ext> naming convention.
.resx
Learn more XML-based .NET resource files. Translates the inner text of each <data><value> node, preserving comments and metadata.
<?xml version="1.0" encoding="utf-8"?><root> <data name="Greeting" xml:space="preserve"> <value>Hello, world!</value> <comment>Shown on the home page</comment> </data> <data name="Goodbye" xml:space="preserve"> <value>See you later</value> </data></root>.xliff
Learn more OASIS XLIFF 2.0 documents. Translates each <source> and writes the result into the corresponding <target>, setting trgLang for the locale.
<?xml version="1.0" encoding="utf-8"?><xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en"> <file id="ui"> <unit id="greeting"> <segment> <source>Hello, world!</source> </segment> </unit> </file></xliff>.po
Learn more GNU gettext Portable Object files. Translates each msgid / msgid_plural into msgstr / msgstr[n] forms.
msgid ""msgstr """Content-Type: text/plain; charset=UTF-8\n"
msgid "Hello, world!"msgstr ""
msgid "%d apple"msgid_plural "%d apples"msgstr[0] ""msgstr[1] "".json
Learn more Arbitrary JSON files. Nested objects are flattened with the [--] delimiter for translation, then re-nested on output. Dotted keys ("unit.dotted.key") are preserved verbatim.
{ "app": { "title": "Resource Translator", "tagline": "Localize your repo on every commit" }, "buttons": { "save": "Save", "cancel": "Cancel" }}.ini
Learn more Simple key=value files (Win32-style INI or any flat config). Section headers and comments are preserved.
# Display strings[ui]greeting=Hello, world!goodbye=See you later
[errors]not_found=The resource you requested was not found..restext
Learn more Microsoft MUI text resources — flat key=value pairs used as a textual companion to .resx.
Greeting=Hello, world!Goodbye=See you laterNotFound=The resource you requested was not found.Round-trip guarantees
The test suite verifies byte-for-byte round-tripping for representative fixtures of every format. If a format quirk breaks round-tripping in your codebase, please open an issue with a minimal sample.