> ## 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 para iOS

## Idiomas Suportados

O SDK suporta dois idiomas nativamente:

```swift theme={"theme":"catppuccin-latte"}
// Inglês (padrão)
let localization = LivenessLocalization.default

// Português (Brasil)
let localization = LivenessLocalization.ptBR
```

## Usando Idioma Predefinido

### Método Simples

```swift theme={"theme":"catppuccin-latte"}
import HubLivenessSDK

// Opção 1: Português Brasileiro
let config = LivenessHubConfig(
    apiBaseUrl: "https://api.yourserver.com",
    apiKey: "your-api-key",
    appName: "YourAppName",
    cek: "your-base64-encoded-cek",
    localization: .ptBR
)

// Opção 2: Inglês (padrão)
let config = LivenessHubConfig(
    apiBaseUrl: "https://api.yourserver.com",
    apiKey: "your-api-key",
    appName: "YourAppName",
    cek: "your-base64-encoded-cek",
    localization: .default
)
```

## Customização Completa de Textos

Para customizar todos os textos exibidos durante o fluxo de liveness, você pode criar um objeto `HubLocalization` personalizado.

### Estrutura de Strings

O SDK organiza os textos nas seguintes categorias:

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

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

  <Card title="Botões" icon="square">
    Textos dos botões e ações
  </Card>
</CardGroup>

### Criando Localização Customizada

```swift theme={"theme":"catppuccin-latte"}
import HubLivenessSDK

let customLocalization = HubLocalization(
    // Mensagens de carregamento
    loadingMessage: "Carregando...",
    preparingCamera: "Preparando câmera...",

    // Instruções de posicionamento
    positionFace: "Posicione seu rosto no centro",
    holdStill: "Mantenha-se parado",

    // Status de processamento
    processing: "Processando...",

    // Mensagens de resultado
    success: "Verificação concluída!",
    error: "Erro na verificação",

    // Botões
    tryAgain: "Tentar novamente",
    cancel: "Cancelar"
)

let config = HubConfig(
    apiBaseUrl: "https://api.yourserver.com",
    apiKey: "your-api-key",
    appName: "YourAppName",
    cek: "your-base64-encoded-cek",
    localization: customLocalization
)
```

<Tabs>
  <Tab title="Feedback">
    Durante a captura facial, o SDK exibe feedbacks para guiar o usuário:

    ```swift theme={"theme":"catppuccin-latte"}
    let localization = HubLocalization(
        // 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",

        // Ângulo/Pose
        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",
        neutralExpression: "Mantenha uma expressão neutra",

        // Iluminação
        tooDark: "Ambiente muito escuro",
        tooBright: "Luz muito forte",

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

  <Tab title="Telas">
    Personalize os textos das telas principais:

    ```swift theme={"theme":"catppuccin-latte"}
    let localization = HubLocalization(
        // Tela de preparação
        getReadyTitle: "Prepare-se",
        getReadySubtitle: "Vamos iniciar a verificação",
        getReadyMessage: "Certifique-se de estar em um ambiente bem iluminado",

        // Tela de captura
        captureTitle: "Captura Facial",
        captureHelpText: "Posicione seu rosto no centro da tela",

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

        // 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",

        // Tela de upload
        uploadingMessage: "Enviando sua foto...",
        successMessage: "Verificação concluída com sucesso!"
    )
    ```
  </Tab>

  <Tab title="Botões">
    ```swift theme={"theme":"catppuccin-latte"}
    let localization = HubLocalization(
        // Botões principais
        buttonBack: "Voltar",
        buttonCapture: "Capturar",
        buttonRetake: "Refazer",
        buttonSubmit: "Enviar",
        buttonImReady: "Estou Pronto",
        buttonTryAgain: "Tentar Novamente",
        buttonOk: "OK",
        buttonContinue: "Continuar",
        buttonCancel: "Cancelar"
    )
    ```
  </Tab>
</Tabs>

## Idiomas Predefinidos Completos

<Tabs>
  <Tab title="Português (pt-BR)">
    ```swift theme={"theme":"catppuccin-latte"}
    let ptBrLocalization = HubLocalization(
        loadingMessage: "Carregando...",
        preparingCamera: "Preparando câmera...",
        positionFace: "Posicione seu rosto no centro",
        holdStill: "Mantenha-se parado",
        processing: "Processando...",
        success: "Verificação concluída com sucesso!",
        error: "Erro na verificação",
        tryAgain: "Tentar novamente",
        cancel: "Cancelar",
        noFaceDetected: "Nenhum rosto detectado",
        multipleFaces: "Múltiplos rostos detectados",
        tooClose: "Afaste-se um pouco",
        tooFar: "Aproxime-se",
        tooDark: "Ambiente muito escuro",
        tooBright: "Luz muito forte"
    )
    ```
  </Tab>

  <Tab title="English (default)">
    ```swift theme={"theme":"catppuccin-latte"}
    let englishLocalization = HubLocalization(
        loadingMessage: "Loading...",
        preparingCamera: "Preparing camera...",
        positionFace: "Position your face in the center",
        holdStill: "Hold still",
        processing: "Processing...",
        success: "Verification completed successfully!",
        error: "Verification error",
        tryAgain: "Try again",
        cancel: "Cancel",
        noFaceDetected: "No face detected",
        multipleFaces: "Multiple faces detected",
        tooClose: "Move away slightly",
        tooFar: "Move closer",
        tooDark: "Environment too dark",
        tooBright: "Light too bright"
    )
    ```
  </Tab>
</Tabs>

## Classes de Localização

### Resumo

| Struct            | Descrição                                 |
| ----------------- | ----------------------------------------- |
| `HubLocalization` | Configuração principal de idioma e textos |
| `.default`        | Preset em inglês                          |
| `.ptBR`           | Preset em português brasileiro            |

<Tip>
  Você pode criar uma localização parcial. Os campos não especificados usarão
  os valores padrão do idioma selecionado.
</Tip>

## Exemplo Completo de Customização

```swift theme={"theme":"catppuccin-latte"}
import HubLivenessSDK

// Criar localização totalmente customizada
let customLocalization = HubLocalization(
    // Mensagens gerais
    loadingMessage: "Aguarde...",
    preparingCamera: "Iniciando câmera...",
    positionFace: "Centralize seu rosto",
    holdStill: "Fique parado",
    processing: "Analisando...",
    success: "Tudo certo!",
    error: "Ops! Algo deu errado",
    tryAgain: "Refazer",
    cancel: "Sair",

    // Feedbacks de captura
    noFaceDetected: "Cadê você?",
    multipleFaces: "Uma pessoa por vez, por favor",
    tooClose: "Dê um passo para trás",
    tooFar: "Chegue mais perto",
    tooDark: "Precisa de mais luz",
    tooBright: "Muita luz, busque sombra"
)

// Aplicar na configuração
let config = HubConfig(
    apiBaseUrl: "https://api.yourserver.com",
    apiKey: "your-api-key",
    appName: "MeuApp",
    cek: "your-base64-encoded-cek",
    localization: customLocalization
)

// Inicializar SDK
Task {
    try await HubLiveness.shared.initialize(config: config)
}
```

## Próximos Passos

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

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