This PR introduces a comprehensive internationalization (i18n) layer for the Flowsint platform, transitioning the dashboard from hardcoded English strings to a fully dynamic localization system.
Key implementations include:
String Extraction & Refactoring: Extracted hardcoded UI strings from React components (Flows, Enricher Items, Custom Types, Vault, Settings) and replaced them with dynamic react-i18next hooks.
Dynamic Entities Localization: Automated translation mapping for 40+ Base Types (Organization, Domain, IP, Phrase, etc.) and their specific properties. The localization architecture preserves technical IDs for backend serialization while displaying localized labels in the UI.
Enricher Modules: Added descriptions and UI property translations for 45+ built-in enricher plugins.
Templates Editor: Full localization of the YAML Enricher Templates editor, including validation messages, IDE actions, and toast notifications.
Locale Synchronization: Updated en.json, ru.json, fr.json, and it.json to share identical key structures. Original English text was preserved in en.json, ensuring stable behavior for English users while enabling full support for Russian and serving as a foundation for other languages.
Motivation and Context
To support a global user base and make the platform accessible to analysts in multiple languages. By decoupling display text from component logic and backend docstrings, we enable easier maintenance and community-driven translations.
Type of change
New feature (non-breaking change which adds functionality)
Refactoring / UI Improvements
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
## 📋 Pull Request Information
**Original PR:** https://github.com/reconurge/flowsint/pull/195
**Author:** [@sevasdron](https://github.com/sevasdron)
**Created:** 7/14/2026
**Status:** 🔄 Open
**Base:** `main` ← **Head:** `Localization`
---
### 📝 Commits (10+)
- [`ef66e4d`](https://github.com/reconurge/flowsint/commit/ef66e4d5be7403fbb49491e316d98d287680c182) feat(i18n): setup i18next and translate core navigation and dashboard
- [`3f27c4e`](https://github.com/reconurge/flowsint/commit/3f27c4e334441d1abaf61600a887a80d7b7d28a5) Enricher tab translation
- [`1687d4b`](https://github.com/reconurge/flowsint/commit/1687d4bd6e3164aa87b23b038a8abcd58a2c5ede) Translation of the Flows tab
- [`142469e`](https://github.com/reconurge/flowsint/commit/142469ecc0746c78eb69a802da6d27943ff12daa) Custom types tab translation
- [`1c9de90`](https://github.com/reconurge/flowsint/commit/1c9de905a283aa9830349090b4092e0bfc677811) Vault tab translation
- [`0f86bc1`](https://github.com/reconurge/flowsint/commit/0f86bc14b8fe985e8d5d9071e8ea65929b059a1f) Enricher templates tab translation
- [`4d26c37`](https://github.com/reconurge/flowsint/commit/4d26c371f3d93ad28daebf9952aa91b94fc326fb) Profile page translation
- [`b6a2078`](https://github.com/reconurge/flowsint/commit/b6a20784b05206c78066e0448166923c73200f82) General fixes
- [`893c61c`](https://github.com/reconurge/flowsint/commit/893c61c21a68b76cdedce750c588c1c1072713ca) Auto-generate French and Italian translations
- [`b5bcde8`](https://github.com/reconurge/flowsint/commit/b5bcde80b9ca159924d1b5e5b5625c733d916755) Auto load languages
### 📊 Changes
**77 files changed** (+28960 additions, -2550 deletions)
<details>
<summary>View changed files</summary>
📝 `.env.example` (+3 -3)
📝 `.gitignore` (+3 -0)
➕ `cleanup_ru.py` (+44 -0)
📝 `flowsint-app/package.json` (+2 -0)
📝 `flowsint-app/src/components/analyses/analysis-editor.tsx` (+20 -18)
➖ `flowsint-app/src/components/analyses/default_content.json` (+0 -235)
📝 `flowsint-app/src/components/analyses/new-analysis.tsx` (+12 -10)
📝 `flowsint-app/src/components/command.tsx` (+9 -7)
📝 `flowsint-app/src/components/custom-types/type-preview.tsx` (+10 -8)
📝 `flowsint-app/src/components/dashboard/empty-states.tsx` (+11 -6)
📝 `flowsint-app/src/components/dashboard/investigation/analyses-section.tsx` (+9 -3)
📝 `flowsint-app/src/components/dashboard/investigation/case-header.tsx` (+20 -15)
📝 `flowsint-app/src/components/dashboard/investigation/investigations-list.tsx` (+23 -10)
📝 `flowsint-app/src/components/dashboard/investigation/share-dialog.tsx` (+35 -37)
📝 `flowsint-app/src/components/dashboard/investigation/sketches-section.tsx` (+10 -5)
📝 `flowsint-app/src/components/dashboard/overview/dashboard-header.tsx` (+7 -4)
📝 `flowsint-app/src/components/flows/context-menu.tsx` (+9 -3)
📝 `flowsint-app/src/components/flows/controls.tsx` (+8 -6)
📝 `flowsint-app/src/components/flows/editor.tsx` (+23 -21)
📝 `flowsint-app/src/components/flows/enricher-list-item.tsx` (+45 -21)
_...and 57 more files_
</details>
### 📄 Description
## Description
This PR introduces a comprehensive internationalization (i18n) layer for the Flowsint platform, transitioning the dashboard from hardcoded English strings to a fully dynamic localization system.
Key implementations include:
- **String Extraction & Refactoring**: Extracted hardcoded UI strings from React components (Flows, Enricher Items, Custom Types, Vault, Settings) and replaced them with dynamic `react-i18next` hooks.
- **Dynamic Entities Localization**: Automated translation mapping for 40+ Base Types (Organization, Domain, IP, Phrase, etc.) and their specific properties. The localization architecture preserves technical IDs for backend serialization while displaying localized labels in the UI.
- **Enricher Modules**: Added descriptions and UI property translations for 45+ built-in enricher plugins.
- **Templates Editor**: Full localization of the YAML Enricher Templates editor, including validation messages, IDE actions, and toast notifications.
- **Locale Synchronization**: Updated `en.json`, `ru.json`, `fr.json`, and `it.json` to share identical key structures. Original English text was preserved in `en.json`, ensuring stable behavior for English users while enabling full support for Russian and serving as a foundation for other languages.
## Motivation and Context
To support a global user base and make the platform accessible to analysts in multiple languages. By decoupling display text from component logic and backend docstrings, we enable easier maintenance and community-driven translations.
## Type of change
- [x] New feature (non-breaking change which adds functionality)
- [x] Refactoring / UI Improvements
---
<sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/reconurge/flowsint/pull/195
Author: @sevasdron
Created: 7/14/2026
Status: 🔄 Open
Base:
main← Head:Localization📝 Commits (10+)
ef66e4dfeat(i18n): setup i18next and translate core navigation and dashboard3f27c4eEnricher tab translation1687d4bTranslation of the Flows tab142469eCustom types tab translation1c9de90Vault tab translation0f86bc1Enricher templates tab translation4d26c37Profile page translationb6a2078General fixes893c61cAuto-generate French and Italian translationsb5bcde8Auto load languages📊 Changes
77 files changed (+28960 additions, -2550 deletions)
View changed files
📝
.env.example(+3 -3)📝
.gitignore(+3 -0)➕
cleanup_ru.py(+44 -0)📝
flowsint-app/package.json(+2 -0)📝
flowsint-app/src/components/analyses/analysis-editor.tsx(+20 -18)➖
flowsint-app/src/components/analyses/default_content.json(+0 -235)📝
flowsint-app/src/components/analyses/new-analysis.tsx(+12 -10)📝
flowsint-app/src/components/command.tsx(+9 -7)📝
flowsint-app/src/components/custom-types/type-preview.tsx(+10 -8)📝
flowsint-app/src/components/dashboard/empty-states.tsx(+11 -6)📝
flowsint-app/src/components/dashboard/investigation/analyses-section.tsx(+9 -3)📝
flowsint-app/src/components/dashboard/investigation/case-header.tsx(+20 -15)📝
flowsint-app/src/components/dashboard/investigation/investigations-list.tsx(+23 -10)📝
flowsint-app/src/components/dashboard/investigation/share-dialog.tsx(+35 -37)📝
flowsint-app/src/components/dashboard/investigation/sketches-section.tsx(+10 -5)📝
flowsint-app/src/components/dashboard/overview/dashboard-header.tsx(+7 -4)📝
flowsint-app/src/components/flows/context-menu.tsx(+9 -3)📝
flowsint-app/src/components/flows/controls.tsx(+8 -6)📝
flowsint-app/src/components/flows/editor.tsx(+23 -21)📝
flowsint-app/src/components/flows/enricher-list-item.tsx(+45 -21)...and 57 more files
📄 Description
Description
This PR introduces a comprehensive internationalization (i18n) layer for the Flowsint platform, transitioning the dashboard from hardcoded English strings to a fully dynamic localization system.
Key implementations include:
react-i18nexthooks.en.json,ru.json,fr.json, andit.jsonto share identical key structures. Original English text was preserved inen.json, ensuring stable behavior for English users while enabling full support for Russian and serving as a foundation for other languages.Motivation and Context
To support a global user base and make the platform accessible to analysts in multiple languages. By decoupling display text from component logic and backend docstrings, we enable easier maintenance and community-driven translations.
Type of change
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.