https://github.com/stas96111/pylocres
Tool for reading and writing Unreal Engine translation files.
https://github.com/stas96111/pylocres
localization locres modding-tools unreal-engine
Last synced: about 2 months ago
JSON representation
Tool for reading and writing Unreal Engine translation files.
- Host: GitHub
- URL: https://github.com/stas96111/pylocres
- Owner: stas96111
- License: mit
- Created: 2025-03-18T20:01:38.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-07-28T20:50:39.000Z (11 months ago)
- Last Synced: 2025-08-30T23:57:34.584Z (10 months ago)
- Topics: localization, locres, modding-tools, unreal-engine
- Language: Python
- Homepage: https://pypi.org/project/pylocres/
- Size: 216 KB
- Stars: 5
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 🧩 PyLocres
[](#)




**PyLocres** is a Python library for reading, writing, and editing `.locres` and `.locmeta` files used in Unreal Engine's localization system.
Supports **all known versions** of Locres, including the latest.
---
## 📦 Installation
Install from PyPI:
```bash
pip install pylocres
```
Or install directly from the repository:
```bash
git clone https://github.com/stas96111/pylocres.git
cd pylocres
pip install -r requirements.txt
pip install .
```
---
## 🛠️ Command Line Tool
```bash
# Show info about a .locres file
pylocres info --path example.locres
# Convert .locres to .csv
pylocres to-csv --path example.locres --out output.csv
# Convert .csv to .locres
pylocres from-csv --path output.csv --out result.locres
# Convert .locres to .po
pylocres to-po --path example.locres --out output.po
# Convert .po to .locres
pylocres from-po --path output.po --out result.locres
```
---
## 📘 Usage: Locres
```python
from pylocres import LocresFile, Namespace, Entry, LocresVersion, entry_hash
# Create Locres file instance
locres = LocresFile()
# Read a .locres file
locres.read("path/to/file.locres")
# Iterate over all namespaces
for namespace in locres:
print("Namespace:", namespace.name or "")
# Iterate over all entries in the namespace
for entry in namespace:
print("Key:", entry.key) # cf433749-2e... (uuid4 or custom key)
print("Translation:", entry.translation) # Hello world!
print("Source Hash:", entry.hash) # 828975897
# Set a new translation
entry.translation = "Привіт світ!"
# Optionally, recalculate source hash
entry.hash = entry_hash("Hello world!")
# Create a new entry and add it to a namespace
new_entry = Entry("my_key", "My translation", entry_hash("My source"))
namespace.add(new_entry)
# Add a new namespace
new_namespace = Namespace("UI")
locres.add(new_namespace)
# Set file format version (default: CityHash)
locres.version = LocresVersion.CityHash
# Save the modified locres file
locres.write("path/to/output.locres")
# Done
```
---
## Locmeta Usage
```python
from pylocres import LocmetaFile, LocmetaVersion
# Create Locmeta file instance
locmeta = LocmetaFile()
# Read a .locmeta file
locmeta.read("path/to/file.locmeta")
# View metadata
print("Version:", locmeta.version)
print("Native culture:", locmeta.native_culture) # en
print("Native locres path:", locmeta.native_locres) # en/Game.locres
print("Compiled cultures:", locmeta.compiled_cultures) # ["en", "de", "fr", ...]
# Modify metadata
locmeta.native_culture = "uk"
# Save changes
locmeta.write("path/to/output.locmeta")
# Done
```
---
## License
MIT License
© 2025 stas96111