/** * A classe `LangUtils` fornece métodos utilitários para gerenciar configurações de * idioma, incluindo recuperar, definir e aplicar preferências de idioma. */ export class LangUtils { /** * Classe estática contendo os códigos de idioma predefinidos. * * @property PT_BR - Português (Brasil) * @property EN_US - Inglês (Estados Unidos) * @property ES_ES - Espanhol (Espanha) */ public static ELanguages = class { static PT_BR = "pt_BR"; static EN_US = "en_US"; static ES_ES = "es_ES"; }; /** * Converte o idioma fornecido para um dos códigos predefinidos. * * @param lang - O idioma a ser convertido (ex.: "en", "es", "pt-BR"). * @returns O código de idioma correspondente (ex.: "en_US", "es_ES"). * * @example * LangUtils.convertLanguage("en"); // Retorna "en_US" * LangUtils.convertLanguage("es-es"); // Retorna "es_ES" */ private static convertLanguage(lang: string): string { switch (lang.toLocaleLowerCase()) { case "en": case "en_us": case "en-us": return LangUtils.ELanguages.EN_US; case "es": case "es_es": case "es-es": return LangUtils.ELanguages.ES_ES; default: return LangUtils.ELanguages.PT_BR; } } /** * Captura o idioma atualmente definido. Primeiro verifica se há um idioma * armazenado nos cookies. Caso contrário, utiliza o idioma definido no elemento * ``. Se nenhum valor for encontrado nos cookies ou no elemento ``, * é utilizada a configuração do navegador. Caso o navegador também não forneça * um idioma, o padrão será `"pt_BR"`. * * @returns O idioma definido (ex.: "pt_BR", "en_US"). * * @example * LangUtils.getLanguage(); // Retorna o idioma atual */ public static getLanguage(): string { const cookieLanguage = this.getLanguageFromCookie(); if (cookieLanguage) { return this.convertLanguage(cookieLanguage); } return this.getHtmlLanguage(); } /** * Recupera o valor do atributo `lang` do elemento ``. Se o ambiente * estiver em modo de desenvolvimento, o idioma padrão será `"pt_BR"`. Caso * contrário, utiliza o idioma do navegador ou `"pt-BR"` como padrão. * * @returns O idioma definido no elemento `` ou o padrão. * * @example * LangUtils.getHtmlLanguage(); // Retorna "pt_BR" no modo desenvolvimento */ public static getHtmlLanguage(): string { if (process.env.NODE_ENV === 'development') { return LangUtils.ELanguages.PT_BR; } const lang = document.documentElement.lang || navigator.language || "pt-BR"; return this.convertLanguage(lang); } /** * Define o atributo `lang` no elemento `` e atualiza o cookie de idioma. * * @param language - O idioma a ser definido (ex.: "pt_BR", "en_US"). * * > **Nota:** Definir o idioma no elemento `` é essencial para garantir que o conteúdo * da página seja interpretado corretamente por navegadores, leitores de tela e mecanismos de * busca, melhorando a acessibilidade e a indexação. * * @example * LangUtils.setHtmlLanguage("en_US"); // Define o idioma como "en_US" */ public static setHtmlLanguage(language: string): void { document.documentElement.lang = language; document.cookie = `lang=${language}; path=/;`; } /** * Recupera o valor do cookie de idioma. * * @returns O valor do cookie de idioma ou `null` se não existir. * * @example * LangUtils.getLanguageFromCookie(); // Retorna "pt_BR" se o cookie existir */ public static getLanguageFromCookie(): string | null { const match = document.cookie.match(new RegExp('(^| )lang=([^;]+)')); return match ? match[2] : null; } /** * Define o atributo `lang` no elemento `` com base no cookie de idioma, se existir. * * @example * LangUtils.applyLanguageFromCookie(); // Aplica o idioma do cookie ao elemento `` */ public static applyLanguageFromCookie(): void { const langFromCookie = this.getLanguageFromCookie(); if (langFromCookie) { this.setHtmlLanguage(langFromCookie); } } }