# I18n Service

The I18n service (`pkg/i18n`) provides internationalization and localization support with automatic language detection and template-based translations.

## Features

- JSON-based locale files
- Embedded locale bundles
- Automatic language detection from environment
- Template variable interpolation
- BCP 47 language tag support

## Basic Usage

```go
import "github.com/Snider/Core/pkg/i18n"

// Create service (defaults to English)
i18n, err := i18n.New()
if err != nil {
    log.Fatal(err)
}
```

## Setting Language

```go
// Set language using BCP 47 tag
err := i18n.SetLanguage("fr")
err := i18n.SetLanguage("en-US")
err := i18n.SetLanguage("zh-Hans")
```

## Translating Messages

```go
// Simple translation
msg := i18n.Translate("welcome_message")

// With template data
msg := i18n.Translate("greeting", map[string]string{
    "Name": "John",
})
// Template: "Hello, {{.Name}}!"
// Result: "Hello, John!"
```

## Available Languages

```go
// Get list of available language codes
langs := i18n.AvailableLanguages()
// Returns: ["en", "es", "fr", "de", ...]
```

## Get All Messages

```go
// Get all translations for a language
messages, err := i18n.GetAllMessages("en")
for key, value := range messages {
    fmt.Printf("%s: %s\n", key, value)
}
```

## Locale File Format

Locale files are JSON stored in `locales/` directory:

```json
// locales/en.json
{
    "welcome": "Welcome to the application",
    "greeting": "Hello, {{.Name}}!",
    "items_count": {
        "one": "{{.Count}} item",
        "other": "{{.Count}} items"
    }
}
```

## Adding New Languages

1. Create a new JSON file in `pkg/i18n/locales/`:
   ```
   locales/es.json
   ```

2. Add translations:
   ```json
   {
       "welcome": "Bienvenido a la aplicación",
       "greeting": "¡Hola, {{.Name}}!"
   }
   ```

3. The service automatically loads embedded locales at startup.

## Language Detection

The service can detect system language from the `LANG` environment variable:

```go
// Automatic detection happens internally
// LANG=fr_FR.UTF-8 -> French
// LANG=de_DE.UTF-8 -> German
```

## Frontend Usage (TypeScript)

```typescript
import {
    SetLanguage,
    Translate,
    AvailableLanguages,
    GetAllMessages
} from '@bindings/i18n/service';

// Set language
await SetLanguage("fr");

// Translate
const welcome = await Translate("welcome_message");

// Get available languages for a selector
const languages = await AvailableLanguages();

// Load all messages for client-side caching
const messages = await GetAllMessages("en");
```
