Qual é a relevância de 'en_AU' em 'LC_CTYPE'? e qual é a saída do 'locale LC_CTYPE'?

5

Primeiro: Embora eu possa entender a relevância dos detalhes da região geográfica para LC_TIME, LC_NUMERIC e a maioria dos outros LC_ * vars, não vejo exatamente como 'en_AU' está relacionado a LC_CTYPE ...
Não é UTF-8 (e outras codificações) o suficiente de uma definição em si (para LC_CTYPE), como e codificação por definiton é consistente? ...

Pensando nisso enquanto escrevo, pode ser que diferentes regiões do mundo capitalizem suas letras minúsculas de forma diferente ... Se esse for o caso, como iconv lidará com isso?
Este iconv ponto é realmente o que me iniciou nesta linha de pensamento, porque ele não pede por uma localidade, ele só pede o formato de codificação de entrada.

Meu próximo quebra-cabeça é: com o que os itens de linha na saída de locale LC_CTYPE se referem e / ou onde é um bom lugar para obter um layout ... Talvez uma pergunta mais relevante seja: por quem e onde, essa informação seria necessária? ..
Tenho certeza que não preciso disso ... mas tudo isso ajuda a preencher a imagem de 'scripts' e 'codificações' e 'locales'; que é surpreendentemente não-trivial assim que você deixa o mundo de ASCII .

    
por Peter.O 26.04.2011 / 15:57

1 resposta

9

Todas as variáveis de localidade usam o mesmo nome de localidade para que você possa especificar sua localidade favorita de uma só vez, por exemplo, %código%. Como você supõe, as informações do país são ocasionalmente relevantes, mesmo em LANG=en_AU.utf8 , por ex. a versão em maiúsculas de LC_CTYPE é i na maioria das linguagens, mas I em turco ( İ ). Mas não espere milagres; por exemplo, a correspondência de maiúsculas e minúsculas é de um para um, portanto, não há uma boa versão em maiúsculas de tr_TR.utf8 in ß (deve ser de_DE.iso8859-1 ).

Você terá mais facilidade em entender a saída de SS , com locale -k LC_CTYPE para ver os nomes das palavras-chave além dos valores (sem -k , o formato de saída foi criado para que você possa obter o valor de uma palavra-chave específica, por exemplo, -k ). A lista de palavras-chave e seus significados dependem do sistema, assim como os dados do código de idioma são armazenados e não interessam a muitas pessoas, portanto você pode não encontrar muita documentação fora do código-fonte da sua biblioteca C. De longe, a forma mais útil do comando de localidade é locale ctype-width para listar nomes de localidade disponíveis.

Para o GNU libc (ou seja, Linux não embutido):

  • Todos os dados de localidade que não sejam mensagens são armazenados em locale -a . Este arquivo é gerado por /usr/lib/locale/locale-archive dos dados em localedef e /usr/share/i18n . O formato dos arquivos de definição de localidade em /usr/local/share/i18n está documentado apenas no código fonte, eu acho.
  • O formato do conjunto de caracteres e dos arquivos de definição de codificação em /usr/share/i18n/locales é padronizado pelo POSIX: 2001 . Esses arquivos (ou, em GNU libc , a versão compilada em /usr/share/i18n/charmaps ) são usados pelo íconev programação e linha de comando . As conversões de codificação também dependem do código em /usr/lib/locale/locale-archive . O manual do Gnu libc documenta como escrever seu próprio módulo gconv , embora essa seção contém o texto “Esta informação deve ser suficiente para escrever novos módulos. Qualquer um que fizer isso também deve dar uma olhada no código fonte disponível nas fontes da biblioteca GNU C. ”.
  • Os catálogos de mensagens recebem tratamento especial porque cada aplicativo vem com seu próprio conjunto. Os catálogos de mensagens estão em /usr/lib/gconv/*.so . O manual contém documentação para redatores de aplicativos . O GNU libc suporta tanto a interface POSIX /usr/share/locale/*/LC_MESSAGES quanto o mais poderoso interface gettext .

As linguagens escritas são de fato muito complicadas, mesmo que você não se distancie do inglês. São os franceses e alemães catgets o mesmo caractere (é um “tréma” exatamente igual como um "trema" , e importa que as impressoras francesas e alemãs digitam o sotaque em um altura ligeiramente diferente)? Qual é a maiúscula de üi em turco)? O İ é transliterado para Ö se você tiver apenas ASCII (em alemão, é O )? Onde OE é classificado em um dicionário (em sueco, após Ä )? E isso é apenas alguns exemplos com idiomas europeus escritos no alfabeto latino! A lista de discussão Unicode tem muitos exemplos e, às vezes, discussões acaloradas sobre esses tópicos.

    
por 26.04.2011 / 16:51

Tags