> ## Documentation Index
> Fetch the complete documentation index at: https://docs-platform.services-valid.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Customização

> Como personalizar idiomas, textos e configurações do Liveness Hub SDK

## Idiomas Suportados

O SDK suporta três idiomas nativamente:

```kotlin theme={"theme":"catppuccin-latte"}
enum class SupportedLanguage {
    EN,      // English
    PT_BR,   // Portuguese (Brazil)
    ES       // Spanish
}
```

## Usando Idioma Predefinido

### Método Simples

```kotlin theme={"theme":"catppuccin-latte"}
import com.valid.entry.localization.LivenessLocalization
import com.valid.entry.localization.SupportedLanguage

// Opção 1: Português Brasileiro
val localization = LivenessLocalization(language = SupportedLanguage.PT_BR)

// Opção 2: Usando factory methods
val localizationPtBr = LivenessLocalization.portugueseBrazil()
val localizationEnglish = LivenessLocalization.default() // English
val localizationSpanish = LivenessLocalization.spanish()
```

### Aplicar na Configuração

```kotlin theme={"theme":"catppuccin-latte"}
val config = LivenessHubConfig(
    apiBaseUrl = "https://api.yourserver.com",
    apiKey = "your-api-key",
    appName = "YourAppName",
    cek = "your-base64-encoded-cek",
    localization = localization  // Aplica o idioma
)
```

## Customização Completa de Textos

Para customizar todos os textos exibidos durante o fluxo de liveness, você pode criar objetos personalizados para cada categoria.

### Estrutura de Strings

O SDK organiza os textos em três categorias:

<CardGroup cols={3}>
  <Card title="ScreenStrings" icon="window">
    Textos de telas (títulos, instruções, mensagens)
  </Card>

  <Card title="FeedbackStrings" icon="comment-dots">
    Textos de feedback em tempo real
  </Card>

  <Card title="ButtonStrings" icon="square">
    Textos dos botões
  </Card>
</CardGroup>

<Tabs>
  <Tab title="Telas (ScreenStrings)">
    ```kotlin theme={"theme":"catppuccin-latte"}
    import com.valid.entry.localization.ScreenStrings

    val screenStrings = ScreenStrings(
        // Tela de captura
        captureTitle = "Captura Facial",
        captureHelpText = "Posicione seu rosto no centro da tela",
        loadingText = "Aguarde, processando...",

        // Tela de revisão
        reviewPhotoTitle = "Revise sua Foto",
        reviewPhotoInstruction = "A imagem está clara e bem iluminada?",

        // Tela de preparação
        getReadyTitle = "Prepare-se",
        getReadySubtitle = "Vamos iniciar a verificação",
        getReadyMessage = "Certifique-se de estar em um ambiente bem iluminado",
        getReadyMessageLine2 = "Remova acessórios como óculos escuros ou bonés",

        // Tela de retry
        retryTitle = "Vamos Tentar Novamente",
        retrySubtitle = "A captura anterior não foi bem sucedida",
        retryTip1 = "Mantenha seu rosto centralizado",
        retryTip2 = "Evite movimentos bruscos",
        yourImageLabel = "Sua Foto",
        idealImageLabel = "Foto Ideal",

        // Tela de upload
        uploadingMessage = "Enviando sua foto...",
        uploadingSlowConnection = "Conexão lenta, por favor aguarde...",
        successMessage = "Verificação concluída com sucesso!"
    )
    ```
  </Tab>

  <Tab title="Feedback (FeedbackStrings)">
    Estes textos são exibidos em tempo real durante a captura:

    ```kotlin theme={"theme":"catppuccin-latte"}
    import com.valid.entry.localization.FeedbackStrings

    val feedbackStrings = FeedbackStrings(
        // Detecção de rosto
        noFaceDetected = "Nenhum rosto detectado",
        multipleFaces = "Múltiplos rostos detectados",
        faceCentered = "Perfeito! Mantenha essa posição",

        // Distância
        tooClose = "Afaste-se um pouco",
        tooFar = "Aproxime-se",

        // Posicionamento
        tooLeft = "Mova para a direita",
        tooRight = "Mova para a esquerda",
        tooHigh = "Abaixe a cabeça levemente",
        tooLow = "Levante a cabeça levemente",
        moveToEyeLevel = "Posicione a câmera na altura dos olhos",

        // Ângulo/Pose
        invalidIED = "Distância inter-ocular inválida",
        faceAngleMisaligned = "Alinhe seu rosto com a câmera",
        lookStraightAhead = "Olhe diretamente para a câmera",
        holdHeadStraight = "Mantenha sua cabeça reta",

        // Expressão
        closedEyes = "Mantenha os olhos abertos",
        smiling = "Mantenha uma expressão neutra",
        neutralExpression = "Perfeito, mantenha assim",
        removeDarkGlasses = "Remova seus óculos escuros",

        // Iluminação
        tooDark = "Ambiente muito escuro",
        tooBright = "Luz muito forte",
        lightFaceEvenly = "Ilumine seu rosto uniformemente",
        brightenEnvironment = "Encontre um ambiente mais iluminado",

        // Captura
        holdSteady = "Mantenha-se parado",
        frameYourFace = "Enquadre seu rosto no oval"
    )
    ```
  </Tab>

  <Tab title="Botões (ButtonStrings)">
    ```kotlin theme={"theme":"catppuccin-latte"}
    import com.valid.entry.localization.ButtonStrings

    val buttonStrings = ButtonStrings(
        back = "Voltar",
        capture = "Capturar",
        retake = "Refazer",
        submit = "Enviar",
        switchCamera = "Trocar Câmera",
        flashOn = "Flash Ligado",
        flashOff = "Flash Desligado",
        imReady = "Estou Pronto",
        tryAgain = "Tentar Novamente",
        ok = "OK",
        continueButton = "Continuar"
    )
    ```
  </Tab>
</Tabs>

### Aplicando Customização Completa

Combine todas as strings customizadas e aplique na configuração:

```kotlin theme={"theme":"catppuccin-latte"}
import com.valid.entry.localization.*

// Crie o objeto de strings customizadas
val customStrings = LivenessStrings(
    screens = screenStrings,
    feedback = feedbackStrings,
    buttons = buttonStrings
)

// Aplique a localização customizada
val localization = LivenessLocalization(
    language = SupportedLanguage.PT_BR,
    customStrings = customStrings
)

// Use na configuração do SDK
val config = LivenessHubConfig(
    apiBaseUrl = "https://api.yourserver.com",
    apiKey = "your-api-key",
    appName = "YourAppName",
    cek = "your-base64-encoded-cek",
    localization = localization
)

LivenessHubSDK.init(applicationContext = this, config = config)
```

## Classes de Localização

### Resumo

| Classe                 | Descrição                                    |
| ---------------------- | -------------------------------------------- |
| `LivenessLocalization` | Configuração principal de idioma e textos    |
| `SupportedLanguage`    | Enum de idiomas suportados                   |
| `LivenessStrings`      | Container para todas as strings customizadas |
| `ScreenStrings`        | Textos de telas                              |
| `FeedbackStrings`      | Textos de feedback em tempo real             |
| `ButtonStrings`        | Textos de botões                             |

<Tip>
  Você pode customizar apenas as strings que deseja alterar. As demais usarão os
  valores padrão do idioma selecionado.
</Tip>

## Próximos Passos

<CardGroup cols={2}>
  <Card title="Implementação" icon="code" href="/plataforma/liveness/hub/sdk/android/implementation">
    Veja como implementar a verificação
  </Card>

  <Card title="Troubleshooting" icon="wrench" href="/plataforma/liveness/hub/sdk/android/troubleshooting">
    Resolução de problemas comuns
  </Card>
</CardGroup>
