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
).