Skip to content

PT BR Resolucao de mensagens

Vinícius Campos edited this page Aug 22, 2026 · 1 revision

Resolução de mensagens

English · Início em português

O domínio guarda códigos estáveis e argumentos de interpolação, não texto humano. IErrorMessageResolver transforma esses valores em mensagem na borda de transporte. A implementação JSON carrega catálogos no startup; o adaptador Azure App Configuration lê uma hierarquia IConfiguration a cada consulta.

flowchart TD
    Request[Cultura pedida, por exemplo pt-BR] --> Exact{Código existe em pt-BR?}
    Exact -->|sim| Template[Usar template]
    Exact -->|não| Parent{Código existe na cultura pai pt?}
    Parent -->|sim| Template
    Parent -->|não| Default{Código existe no catálogo invariante ou default?}
    Default -->|sim| Template
    Default -->|não| Code[Devolver Error.Code]
    Template --> Interpolate[Substituir tokens de argumentos conhecidos]
    Interpolate --> Message[Mensagem resolvida]
Loading

Somente um nível de cultura pai é examinado antes do catálogo invariante/default. Placeholders {token} conhecidos são substituídos a partir de Error.Arguments; placeholders desconhecidos permanecem visíveis, o que ajuda a diagnosticar divergência de catálogo. Se nenhum catálogo definir o código, o próprio Error.Code estável é devolvido.

Catálogos JSON

AddOffside usa um catálogo invariante e catálogos de cultura opcionais. O invariante/default é obrigatório. Os arquivos são lidos para memória, portanto alterá-los após o startup não atualiza um resolver já criado. O registro de paths e catálogos está em Mensagens e culturas.

Adaptador Azure App Configuration

AddOffsideAzureAppConfiguration(services, configuration, ...) recebe um IConfiguration já populado pelo host. Ele não conecta ao Azure, seleciona labels, instala o provider nem configura refresh. O resolver apenas consulta a configuração recebida sob Errors (ou a seção configurada), usando default como catálogo invariante. Como a consulta ocorre a cada chamada, novos valores aparecem depois — e somente depois — do refresh feito pelo próprio provider do host.

Cultura da requisição

Um CultureInfo explícito tem precedência. Caso contrário, o adaptador ASP.NET lê Accept-Language e usa apenas o primeiro range. Ele não ordena ranges por peso q nem negocia contra uma lista de culturas suportadas. Range inicial ausente, wildcard ou inválido cai para CultureInfo.CurrentUICulture.

Quando negociação completa for necessária, configure middleware de localização no host para selecionar CurrentUICulture ou passe a cultura explicitamente; não espere que Offside implemente toda a negociação HTTP.

Clone this wiki locally