{"id":21431738,"url":"https://github.com/robdk97/initranslator","last_synced_at":"2026-04-29T10:31:26.788Z","repository":{"id":264207194,"uuid":"853770419","full_name":"ROBdk97/IniTranslator","owner":"ROBdk97","description":"IniTranslator is a WPF-based desktop application designed to help users compare, edit, and manage translations in INI files, typically used for software localization. It allows for easy synchronization between English and translated versions of INI files, providing features for searching, editing, and managing translation tasks efficiently.","archived":false,"fork":false,"pushed_at":"2025-02-27T11:45:13.000Z","size":533,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-27T16:08:02.702Z","etag":null,"topics":["csharp","ini","p4k","starcitizen","tool","translation","wpf"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ROBdk97.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-07T13:44:53.000Z","updated_at":"2025-02-27T11:44:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"c3eb62ad-2454-4f88-adb0-d6af3035878f","html_url":"https://github.com/ROBdk97/IniTranslator","commit_stats":null,"previous_names":["robdk97/initranslator"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ROBdk97%2FIniTranslator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ROBdk97%2FIniTranslator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ROBdk97%2FIniTranslator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ROBdk97%2FIniTranslator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ROBdk97","download_url":"https://codeload.github.com/ROBdk97/IniTranslator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243944969,"owners_count":20372885,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","ini","p4k","starcitizen","tool","translation","wpf"],"created_at":"2024-11-22T23:14:23.246Z","updated_at":"2026-04-29T10:31:26.782Z","avatar_url":"https://github.com/ROBdk97.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# IniTranslator\n\n![GitHub all releases](https://img.shields.io/github/downloads/ROBdk97/IniTranslator/total)\n\nIniTranslator is a Windows WPF desktop application for comparing, editing, and maintaining INI-based translations. It helps translators keep English and localized INI files synchronized with side-by-side editing, search and replace, placeholder validation, automatic backups, version comparison, and direct extraction from Star Citizen P4K archives.\n\n![Screenshot](Image.png)\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Features](#features)\n- [Requirements](#requirements)\n- [Installation](#installation)\n- [Build from Source](#build-from-source)\n- [Usage](#usage)\n- [Keyboard Shortcuts](#keyboard-shortcuts)\n- [Settings](#settings)\n- [Project Structure](#project-structure)\n- [Third-Party Components](#third-party-components)\n- [Contributing](#contributing)\n- [License](#license)\n- [Repository](#repository)\n\n## Overview\n\nIniTranslator is designed for translation maintenance rather than generic text editing.\n\nTypical workflow:\n\n1. Open the current English INI file and the translated INI file.\n2. Review entries in a side-by-side editor.\n3. Search, filter, replace, or copy source text into translation fields.\n4. Translate selected rows with Google Translate or DeepL.\n5. Validate placeholders before saving.\n6. Save changes with an automatic `.bak` backup of the translated file.\n7. Optionally compare against an older English INI or extract a fresh `global.ini` from Star Citizen.\n\n## Features\n\n- Side-by-side INI editing for source and translated values.\n- Fast filtering by key, English text, or translated text.\n- Optional regular-expression search and case-insensitive search.\n- Batch replace on selected translations.\n- Copy/paste support for structured `key=value` clipboard data.\n- Copy English source text directly into translation fields.\n- Translation of selected rows through Google Translate or DeepL.\n- Placeholder mismatch detection for patterns such as `%xx` and Star Citizen action tokens.\n- Automatic backup creation when saving translated files.\n- Reload backup support from the main UI.\n- Comparison against an older INI file to identify changed entries.\n- Extraction of `Data/Localization/english/global.ini` from Star Citizen `Data.p4k` archives.\n- Built-in P4K archive explorer with search, file export, and directory extraction.\n- Light, Dark, and System theme support.\n- Persisted window position, size, language, search settings, provider choice, and game path.\n- Localized UI with built-in language options:\n  English, Spanish, French, Italian, Lithuanian, Portuguese (Brazil), and German.\n\n## Requirements\n\n- Windows 10 or later.\n- Star Citizen installed locally if you want to use archive extraction or the P4K explorer.\n- For source builds: .NET 10 SDK.\n\nNotes:\n\n- The GitHub release package is published as a self-contained `win-x64` build.\n- API keys are only required if you want to use machine translation features.\n\n## Installation\n\nDownload the latest packaged build from GitHub Releases:\n\n- [Release.zip](https://github.com/ROBdk97/IniTranslator/releases/latest/download/Release.zip)\n\nThen:\n\n1. Extract the archive.\n2. Run `IniTranslator.exe`.\n\nNo separate .NET desktop runtime installation is required for the published release package.\n\n## Build from Source\n\nThe CI pipeline restores and publishes the WPF application as a self-contained `win-x64` build with .NET 10.\n\nTo build locally:\n\n```powershell\ndotnet restore .\\IniTranslator\\IniTranslator.csproj -r win-x64\ndotnet build .\\IniTranslator\\IniTranslator.csproj -c Release -r win-x64\n```\n\nTo publish a release-style build locally:\n\n```powershell\ndotnet publish .\\IniTranslator\\IniTranslator.csproj -c Release -r win-x64 --no-restore -o publish -p:DebugType=None -p:PublishSingleFile=true --self-contained true\n```\n\n## Usage\n\n### Open and edit translations\n\nUse `File \u003e Open` to select:\n\n1. The English source INI file.\n2. The translated INI file.\n\nThe main list shows:\n\n- Line number\n- Key\n- English value\n- Editable translation value\n\n### Search and filter\n\nThe toolbar search box filters the current list in real time.\n\n- Search covers key, English text, and translated text.\n- `RegEx` enables regular expression matching.\n- `Ignore Case` switches between ordinal and case-insensitive matching.\n- `Replace` opens a dialog to update selected translations in bulk.\n\n### Translation helpers\n\nEditing commands are available from the menu and keyboard shortcuts:\n\n- Copy selected entries to the clipboard.\n- Paste structured `key=value` content back into matching selected rows.\n- Copy English text into the translation column.\n- Translate selected rows with the configured provider.\n\nCurrently implemented machine translation providers:\n\n- Google Translate\n- DeepL\n\n### Placeholder validation\n\nIniTranslator checks placeholders used in the English value against the translated value and helps you jump between mismatches.\n\nExamples of supported placeholder patterns include:\n\n- `%s`, `%d`, `%r`\n- `[~action(...)]`\n- `~action(...)`\n\nWhen mismatches are found, the app warns before saving so you can review them.\n\n### Backups and reload\n\nWhen you save a translated file, IniTranslator creates a backup next to it:\n\n- `yourfile.ini.bak`\n\nYou can restore that backup with `File \u003e Load Backup`.\n\n### Compare with an older INI\n\nUse `File \u003e Open Old INI File` to load an earlier English INI version.\n\nThis workflow is intended to help when the source file changes between game versions:\n\n- missing keys are added back into the current translation set\n- entry ordering is synchronized with the current English file\n- changed source entries can be reviewed with the `Jump to Next Change` action\n\n### Extract from Star Citizen\n\nUse `File \u003e Extract from Game` to extract the current English `global.ini` from a selected Star Citizen installation version.\n\nThe app attempts to find the game automatically by:\n\n- checking the default installation directory\n- falling back to the RSI Launcher log\n\nAfter selecting a version, IniTranslator reads `Data.p4k`, extracts `Data/Localization/english/global.ini`, and reloads the current translation view against the extracted file.\n\n### P4K archive explorer\n\nUse `File \u003e Explore P4K Archive` to open the built-in archive browser.\n\nThe explorer supports:\n\n- loading a Star Citizen `Data.p4k` archive\n- browsing directories in a tree view\n- searching files by name/path\n- viewing basic metadata for the selected item\n- exporting individual files\n- extracting entire directories\n\nCryXmlB files are exported as `.xml` when applicable.\n\n## Keyboard Shortcuts\n\n- `Ctrl+O`: Open English and translated INI files\n- `Ctrl+S`: Save translated INI file\n- `Ctrl+C`: Copy selected entries\n- `Ctrl+V`: Paste clipboard content into selected entries\n- `Ctrl+M`: Copy English values into the translation column\n- `Ctrl+T`: Translate selected entries\n- `Ctrl+J`: Jump to a specific line\n\nToolbar actions also expose these navigation features:\n\n- Jump to next changed entry\n- Jump to next placeholder mismatch\n\n## Settings\n\nThe settings window includes:\n\n- UI language\n- application theme\n- translation provider\n- DeepL API key\n- Google Translate API key\n- Star Citizen installation path\n\nSettings are stored in:\n\n- `%AppData%\\ROBdk97\\IniTranslator\\settings.json`\n\nAPI keys are stored in the settings file in encrypted form by the application.\n\n## Project Structure\n\n- `IniTranslator/`: main WPF application\n- `IniTranslator/ViewModels/`: main editing, settings, help, and P4K explorer logic\n- `IniTranslator/Windows/`: dialogs and secondary windows\n- `IniTranslator/Helpers/`: settings, translation, file equalization, clipboard, and path helpers\n- `IniTranslator/Models/`: settings and translation data models\n- `ROBdk97.Unp4k/`: modified P4K archive handling library used by the app\n- `IniTranslaterSetup/`: legacy setup project artifacts\n\n## Third-Party Components\n\n- Modified version of [dolkensp/unp4k](https://github.com/dolkensp/unp4k)\n- Modified version of [icsharpcode/SharpZipLib](https://github.com/icsharpcode/SharpZipLib)\n- [DeepL.net](https://www.nuget.org/packages/DeepL.net)\n- `libzstd.dll` / Zstandard support used by the archive tooling\n\n## Contributing\n\nContributions are welcome.\n\n1. Fork the repository.\n2. Create a branch for your change.\n3. Make and test the change.\n4. Open a pull request with a clear description.\n\nIf you plan a larger change, open an issue first so the scope can be discussed.\n\n## License\n\nThis project is licensed under the [MIT License](https://github.com/ROBdk97/IniTranslator/blob/main/LICENSE).\n\n## Repository\n\n- GitHub: [ROBdk97/IniTranslator](https://github.com/ROBdk97/IniTranslator)\n- Issues: [Open an issue](https://github.com/ROBdk97/IniTranslator/issues)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobdk97%2Finitranslator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobdk97%2Finitranslator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobdk97%2Finitranslator/lists"}