Seu entendimento é parcialmente correto, mas apenas parcialmente. Uma coisa que você está perdendo para entender isso é como as configurações de localidade são usadas. As configurações de localidade são usadas por várias funções de biblioteca que executam ações dependentes de localidade, como traduzir mensagens (que usa LC_MESSAGES ), formatar números ( LC_NUMERIC ) e datas ( LC_TIME , codificar e decodificar texto ( LC_CTYPE ), classificando o texto ( LC_COLLATE ), etc.
Tome por exemplo uma função que formata uma data. Se solicitado a usar um formato dependente de localidade, ele procurará as regras de formatação de data na localidade que foi configurada para uso no processo atual. A formatação de data não se preocupa com um nome de localidade, o que ela precisa saber é como formatar a data. Então, enquanto ele olha no que você poderia chamar de “tabela de localidade”, esta tabela não contém nomes (por exemplo, LC_TIME é fr_FR ) mas configurações (por exemplo “o formato de data abreviada usa o dia do pedido-mês-ano , o formato de data por extenso usa os nomes dos meses janvier , février ,… ”).
A função C setlocale preenche algumas entradas na tabela de configurações de localidade do processo. São necessários dois argumentos: uma categoria para preencher e uma cadeia que é um nome dado a um valor específico para essas configurações de localidade. A string é basicamente um nome de arquivo para carregar as configurações. Por exemplo, setlocale(LC_TIME, "fr_FR") basicamente significa “carregar configurações de formatação de data na tabela de localidade do processo a partir do arquivo /usr/share/i18n/locales/fr_FR ” (é mais complicado do que isso, outros arquivos estão envolvidos, mas essa é a idéia básica).
A função C setlocale tem um modo de operação onde procurará variáveis de ambiente. Se você der a ela uma string vazia em vez de um nome, ela determinará um nome de código do idioma baseado no hierarquia de variável de ambiente de localidade . Este modo é o que a maioria dos programas usa. Mais uma vez, as variáveis de ambiente e os nomes de localidade influenciam o setlocale , não como funcionam as funções que executam ações dependentes de localidade.
A tabela de configurações de localidade é um recurso da biblioteca padrão ( libc ) à qual quase todos os programas são vinculados (independentemente de em que idioma estão escritos). A maioria dos idiomas fornece uma maneira de defini-lo chamando a função setlocale da biblioteca padrão. Por exemplo, Perl e Python possuem uma função setlocale que se assemelha a C's. Os idiomas de alto nível também costumam ter uma maneira de definir configurações de localidade com base no ambiente, por exemplo, use locale em Perl; no bash é automático, mas as configurações de localidade não são baseadas no ambiente, mas nas variáveis do shell com o mesmo nome (portanto, configurar eg LC_COLLATE tem um efeito no bash mesmo se você não export ).
