Single-click tools to extract text into an editable state and pack everything back afterward. The goal is to keep the workflow simple and practical.
In case of troubles you also can contact the original author at Discord: sherekhanromeo
- Python 3.10+ and its modules:
pip install pandaspip install xlsxwriterpip install coloramapip install openpyxl
- Basic stable
.cstlfiles translation support - Code fixes
Next goal: rewrite code for multithreading support and make it into UI.
HUGE thanks to Trigger and his TriggersTools.CatSystem2 wiki for gathering all info on CS2 file formats and tools in one place.
- copy
.batfiles and thetoolsfolder into your game folder - run
1) unpack.batto get:source game fileswith extracted original game files for referencetranslate herewith.xlsxfiles and, for some games,.inifiles containing translatable text
- translate names in
translate here/nametable.xlsxand run2) apply names translations.batto apply those names to all.xlsxfiles intranslate here/clean texts/ - run
3) pack.batto generate anupdateXX.intarchive containing:.initranslations fromtranslate here/clean localization texts/compiled back into.cstl.xlsxtranslations fromtranslate here/clean texts/compiled back into.cst- files from subfolders inside
translate here/your files AS IS
- IF THE GAME HAS LOCALIZATION
.cstl/.iniFILES, THEY TAKE PRIORITY OVER.cst/.xlsxTRANSLATION FILES. - IN THIS CASE TRANSLATE USING ONLY
.cstl/.iniFILES.
tools/bin- native executables and runtime dependencies used during unpack / pack
tools/scripts- project Python entrypoints such as
unpack.py,pack.py,apply_name_translations.py
- project Python entrypoints such as
tools/scripts/cstl_tool- CSTL-related Python package and its
__main__.pyentrypoint
- CSTL-related Python package and its
- extracts:
.intarchives usingexkifint_v3.exe.cstinto.txtusingcs2_decompile.exe.cstlinto.iniusingtools/scripts/cstl_tool/__main__.py- translatable text into
.xlsx
- places files into categorized folders under
source game filesandtranslate here - writes unpack logs into
logs/unpack - shows progress bar, percentage, and ETA
- shows key file detection status for main executable,
config.int, andscene.int
- copies original files from
source game files/textsandnametable.csv, applies translations, and packs results - packs files from
translate here/your files AS ISas-is - compiles
.inilocalization files back into.cstlusingtools/scripts/cstl_tool/__main__.py - attempts to auto-fix missing
[cstl]headers and duplicated message sections in.inifiles before packing
- Amakano+ (non-Steam, unrated) = success
- Grisaia no Kajitsu (non-Steam, unrated) and (Steam, all-ages) = success
- Grisaia no Meikyuu (non-Steam, unrated) = success
- Grisaia no Rakuen (non-Steam, unrated) = success
- NekoPara vol.3 (non-Steam, unrated) = success
- The girl who's called the world (non-Steam, unrated) = success
- Yuki Koi Melt (non-Steam, unrated) = success
-
ShiftJIS (game engine encoding) doesn't support use of some specific symbols from some languages:
Ää, Öö, Üü, ßfrom German;Áá, Ââ, Ãã, Àà, Çç, Éé, Êê, Íí, Óó, Ôô, Õõ, Úúfrom portuguese;Ññfrom Spanish;Èè, Ëë, Îî, Ïï, Ûû, Ùù, Ÿÿfrom French; etc.
Possible solution = create and use custom font that shows required unsupported symbols instead of unused symbols (f.e. Cyrillic ones), E.g.: you need the game to show word
Färbungso you type something likeFьrbungand font showsьasä. Added it into ToDo list, will try to solve later.