# Sniffnet Internationalization Languages: Complete Guide to All 23 Supported Locales

> Explore Sniffnet's internationalization and discover all 23 supported languages. This comprehensive guide details every locale for a global network monitoring experience.

- Repository: [Giuliano Bellini/sniffnet](https://github.com/GyulyVGC/sniffnet)
- Tags: deep-dive
- Published: 2026-04-28

---

**TLDR:** Sniffnet supports 23 internationalization languages defined in the `Language` enum in [`src/translations/types/language.rs`](https://github.com/GyulyVGC/sniffnet/blob/main/src/translations/types/language.rs), accessible through the `Language::ALL` constant which provides an ordered list of all locale variants including English, Italian, French, Simplified Chinese, and others.

Sniffnet is an open-source network monitoring tool built in Rust that provides comprehensive traffic analysis capabilities. Its robust **internationalization** system supports **23 languages**, allowing users worldwide to interact with the application in their native tongue. The complete list of **Sniffnet internationalization languages** is centrally defined in [`src/translations/types/language.rs`](https://github.com/GyulyVGC/sniffnet/blob/main/src/translations/types/language.rs) through a strongly-typed enum architecture.

## Complete List of Sniffnet Internationalization Languages

The `Language` enum in [`src/translations/types/language.rs`](https://github.com/GyulyVGC/sniffnet/blob/main/src/translations/types/language.rs) enumerates 23 distinct locale variants. Each variant maps to a human-readable name, a country flag icon, and translation bundle status metadata.

The supported languages are:

- **`EN`** — English (GB flag)
- **`IT`** — Italiano (IT flag)
- **`FR`** — Français (FR flag)
- **`ES`** — Español (ES flag)
- **`PL`** — Polski (PL flag)
- **`DE`** — Deutsch (DE flag)
- **`UK`** — Українська (UA flag)
- **`ZH`** — 简体中文 (CN flag for Simplified Chinese)
- **`ZH_TW`** — 繁體中文 (TW flag for Traditional Chinese)
- **`RO`** — Română (RO flag)
- **`KO`** — 한국어 (KR flag)
- **`PT`** — Português (PT flag)
- **`TR`** — Türkçe (TR flag)
- **`RU`** — Русский (RU flag)
- **`EL`** — Ελληνικά (GR flag)
- **`SV`** — Svenska (SE flag)
- **`FI`** — Suomi (FI flag)
- **`JA`** — 日本語 (JP flag)
- **`UZ`** — Oʻzbekcha (UZ flag)
- **`VI`** — Tiếng Việt (VN flag)
- **`ID`** — Bahasa Indonesia (ID flag)
- **`NL`** — Nederlands (NL flag)
- **`CS`** — Čeština (CZ flag)

These variants are collected in the `Language::ALL` constant, which the UI iterates over when presenting the language selector in the settings page.

## How the Internationalization System Works

Sniffnet's i18n architecture centers on the `Language` enum defined in [`src/translations/types/language.rs`](https://github.com/GyulyVGC/sniffnet/blob/main/src/translations/types/language.rs). This file contains the source of truth for all localization data, including display formatting, flag mappings, and translation status tracking.

### Core Data Structure

The `Language` enum declares each supported locale as a variant. The constant `Language::ALL` provides an array containing all 23 variants in the order they appear in the language selector UI. When the application initializes the settings page in [`src/gui/pages/settings_general_page.rs`](https://github.com/GyulyVGC/sniffnet/blob/main/src/gui/pages/settings_general_page.rs), it iterates over `Language::ALL` to populate the dropdown menu available to users.

### Flag Icons and Visual Indicators

Each language variant maps to a specific country flag through the `get_flag()` method. This implementation in [`src/translations/types/language.rs`](https://github.com/GyulyVGC/sniffnet/blob/main/src/translations/types/language.rs) returns SVG data defined in [`src/countries/flags_pictures.rs`](https://github.com/GyulyVGC/sniffnet/blob/main/src/countries/flags_pictures.rs). For example, the `ZH` variant displays the CN (China) flag for Simplified Chinese, while `ZH_TW` uses the TW (Taiwan) flag for Traditional Chinese.

### Translation Status Checking

Not all language packs receive updates simultaneously. The `is_up_to_date()` method on the `Language` enum reports whether a specific locale's translation bundle is current. The application uses this metadata to indicate to users when a translation may be incomplete or outdated.

## Accessing Language Data Programmatically

Developers extending Sniffnet can interact with the internationalization system directly through the public API exposed in [`src/translations/mod.rs`](https://github.com/GyulyVGC/sniffnet/blob/main/src/translations/mod.rs).

The following example demonstrates iterating over supported languages and checking their properties:

```rust
use sniffnet::translations::types::language::Language;

fn list_available_languages() {
    for lang in Language::ALL.iter() {
        println!("{}", lang);
        
        if !lang.is_up_to_date() {
            println!("  Warning: Translation needs update");
        }
    }
}

```

To retrieve the appropriate flag icon for UI rendering:

```rust
fn render_language_flag(lang: Language) -> iced::widget::Svg<'static, sniffnet::StyleType> {
    lang.get_flag()
}

```

The `Display` implementation for `Language` formats debug output as `Variant - Human-readable name`, making logging straightforward across all 23 supported locales.

## Summary

- Sniffnet supports **23 internationalization languages** defined in [`src/translations/types/language.rs`](https://github.com/GyulyVGC/sniffnet/blob/main/src/translations/types/language.rs)
- The `Language::ALL` constant provides an ordered array of all locale variants for UI iteration
- Each language includes metadata for **human-readable names**, **flag icons** (via `get_flag()`), and **update status** (via `is_up_to_date()`)
- The settings UI in [`src/gui/pages/settings_general_page.rs`](https://github.com/GyulyVGC/sniffnet/blob/main/src/gui/pages/settings_general_page.rs) uses this data structure to render the language selector
- Flag SVG data resides in [`src/countries/flags_pictures.rs`](https://github.com/GyulyVGC/sniffnet/blob/main/src/countries/flags_pictures.rs) and is mapped through the translation types module

## Frequently Asked Questions

### How many languages does Sniffnet support?

Sniffnet currently supports **23 languages** through its internationalization system. The complete list includes major world languages such as English, Spanish, French, German, Simplified and Traditional Chinese, Japanese, Korean, and others, as defined in the `Language` enum in [`src/translations/types/language.rs`](https://github.com/GyulyVGC/sniffnet/blob/main/src/translations/types/language.rs).

### How do I change the interface language in Sniffnet?

The language selector is located in the general settings page. The UI iterates over the `Language::ALL` constant defined in [`src/translations/types/language.rs`](https://github.com/GyulyVGC/sniffnet/blob/main/src/translations/types/language.rs) to display available options in [`src/gui/pages/settings_general_page.rs`](https://github.com/GyulyVGC/sniffnet/blob/main/src/gui/pages/settings_general_page.rs). Select your preferred language from the dropdown menu to apply the localization immediately.

### Why does some text appear in English even when another language is selected?

This occurs when a translation bundle is not fully current. The `is_up_to_date()` method on the `Language` enum identifies which locales have complete translations. Languages marked as not up-to-date may display English text as a fallback for untranslated strings.

### How are the flag icons associated with each language?

Each `Language` variant implements the `get_flag()` method which returns an SVG icon. The mapping connects language codes to specific country flags (for example, `EN` maps to the GB flag, `ZH` to CN, and `ZH_TW` to TW). The actual SVG data is stored in [`src/countries/flags_pictures.rs`](https://github.com/GyulyVGC/sniffnet/blob/main/src/countries/flags_pictures.rs) and rendered through the Iced UI framework.