mirror of
https://github.com/loot/prelude.git
synced 2026-07-27 14:16:48 -07:00
Add script to write strings from translations to prelude.yaml
This commit is contained in:
@@ -6,7 +6,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for information on how to contribute to t
|
||||
|
||||
### Synchronising Weblate translations
|
||||
|
||||
The `translations` directory holds files that are read and written by [Weblate](https://hosted.weblate.org/projects/loot/prelude/). There's a script that can be used to regenerate their content from `prelude.yaml`.
|
||||
The `translations` directory holds files that are read and written by [Weblate](https://hosted.weblate.org/projects/loot/prelude/). There are a couple of scripts that can be used to keep them in sync with `prelude.yaml`.
|
||||
|
||||
To use the scripts, first install their dependencies in a virtual environment. On Windows, make sure Python 3 is installed, then run:
|
||||
|
||||
@@ -22,4 +22,10 @@ To regenerate the files in the `translations` directory from `prelude.yaml`, run
|
||||
py scripts/export-translations.py
|
||||
```
|
||||
|
||||
The script makes assumptions about the formatting and layout of entries in `prelude.yaml`, so it's worth double-checking its changes.
|
||||
It's also possible to overwrite the message text in `prelude.yaml` using the contents of the `translations` directory:
|
||||
|
||||
```
|
||||
py scripts/import-translations.py
|
||||
```
|
||||
|
||||
The scripts make assumptions about the formatting and layout of entries in `prelude.yaml`, so it's worth double-checking their changes.
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Read localised message content strings from translations/messages.<lang>.yaml
|
||||
# files and use them to replace the corresponding strings in prelude.yaml.
|
||||
import math
|
||||
import re
|
||||
import os
|
||||
|
||||
import yaml
|
||||
|
||||
messages = {}
|
||||
for f in os.scandir('translations'):
|
||||
match = re.match(r'messages\.([^\.]+)\.yaml', f.name)
|
||||
if match:
|
||||
lang = match.group(1)
|
||||
with open(f.path, encoding='utf8') as input:
|
||||
messages[lang] = yaml.safe_load(input)
|
||||
|
||||
lines = []
|
||||
with open('prelude.yaml', encoding='utf8') as input:
|
||||
lines = input.readlines()
|
||||
|
||||
anchor = None
|
||||
lang = None
|
||||
for index, line in enumerate(lines):
|
||||
match = re.search(r' &([^\s]+)$', line)
|
||||
if match != None:
|
||||
anchor = match.group(1)
|
||||
lang = None
|
||||
text = None
|
||||
continue
|
||||
|
||||
match = re.search(r'- lang: ([a-zA-Z_]+)', line)
|
||||
if match != None:
|
||||
lang = match.group(1)
|
||||
text = None
|
||||
continue
|
||||
|
||||
match = re.search(r' text: \'(.+)\'', line)
|
||||
if match != None and anchor and lang:
|
||||
# Replace line with a new line for this message
|
||||
message = yaml.dump(messages[lang][anchor], width=math.inf, allow_unicode=True, default_style="'")
|
||||
|
||||
lines[index] = re.sub(r' text: \'.+\'', f' text: {message.strip()}', line)
|
||||
|
||||
|
||||
with open('prelude.yaml', mode='w', encoding='utf8') as output:
|
||||
output.writelines(lines)
|
||||
Reference in New Issue
Block a user