A simple CLI tool for managing localization of DayZ stringtables.csv
and Gettext formats.
This utility helps you:
- Generate a POT template from your base CSV of original strings.
- Create PO files (per language) from CSV, with empty translations.
- Merge PO files back into a full CSV of translations.
- Update existing PO files when you add new strings to CSV.
- Show translation statistics with completion percentages and untranslated strings.
Under the hood it uses simplified gettext .pot and .po formats.
.pot: template with allmsgid(original texts) andmsgctxt(keys), emptymsgstr..po: one.poper language, wheremsgstrholds actual translations.
- Get your source strings in CSV.
pot→ generate.pottemplate.pos→ create new.pofiles with blank translations.- Edit
.pofiles using Poedit, Crowdin, LLM-assisted scripts, or manually. make→ export translations back into CSV.- When new strings appear:
update→ merge into existing.po.
Using Git, translators can work on just their own .po files in separate
branches/PRs, avoiding noise in other locales.
Download the latest binary from releases or build from source:
git clone https://github.com/woozymasta/dayz-stringtable.git
cd dayz-stringtable
go build ./cmd/dayz-stringtableOr use Makefile for building:
make build # Build for current platform
make release # Build for all supported platforms
make test # Run tests
make lint # Run linterdayz-stringtable [OPTIONS] <command>-v, --versionshow version and build info-h, --helpshow help
Generate a POT template (empty translations):
dayz-stringtable pot -i stringtable.csv -o stringtable.potCreate PO files per language (empty msgstr):
dayz-stringtable pos -i stringtable.csv -o l18n
# or for specific langs:
dayz-stringtable pos -i stringtable.csv -l russian,spanish -o l18nMerge all PO files into one CSV of translations:
dayz-stringtable make -i stringtable.csv -d l18n -o translated.csvAdd new strings from CSV to existing PO files:
dayz-stringtable update -i stringtable.csv -d l18n
# to a separate folder:
dayz-stringtable update -i stringtable.csv -d l18n -o updated_l18nShow translation statistics for PO files:
# Basic statistics for all languages
dayz-stringtable stats -i stringtable.csv -d l18n
# Filter by specific language
dayz-stringtable stats -i stringtable.csv -d l18n -l russian -l english
# Verbose mode with untranslated strings
dayz-stringtable stats -i stringtable.csv -d l18n -V
# JSON format (useful for AI agents and automation)
dayz-stringtable stats -i stringtable.csv -d l18n -cV -f jsonThe stats command displays:
- Translated count: Number of translated strings
- Total count: Total number of strings
- Completion percentage: Percentage of translated strings
- Remaining count: Number of untranslated strings
- Untranslated details (with
--verbose): List of untranslated strings with row numbers, keys, and original text
JSON output format includes all statistics in a structured format suitable for AI agents and automation scripts.
When used with --clear-only flag (-c), the command excludes entries
with # notranslate comment from translated count, making it useful
for machine translation workflows where you need to identify strings
that actually need translation (excluding intentionally untranslated ones).
Remove msgstr that duplicate msgid in PO files:
dayz-stringtable clean -d l18n
# Only specific languages:
dayz-stringtable clean -d l18n -l russian -l english
# Remove unused entries (not present in CSV):
dayz-stringtable clean -d l18n -i stringtable.csv --remove-unused
# Clear only, don't add notranslate comment:
dayz-stringtable clean -d l18n --clear-onlyThe command scans all .po files in the directory
(optionally filtered by -l)
and clears msgstr where it is identical to msgid.
By default, it also adds a # notranslate comment to cleaned entries.
Use --clear-only to skip adding the comment.
Use --remove-unused with -i
to remove entries that are no longer present in the CSV file.
For integration into your project or CI, you can check out the examples of automation scripts strings.sh and strings.ps1
- Poedit – GUI editor that can auto-translate using DeepL/Google APIs.
- Crowdin/Lokalise/POEditor – cloud localization platform.
- LLMs – you can script
translate-toolkitwith LibreTranslate or OpenAI to auto-fillmsgstr.
Your support is greatly appreciated!