Altera uma definição de local (em oposição a uma configuração de locale)

8

Observação preliminar : essa questão não é sobre definir uma localidade alterando LC_ALL , LC_TIME , LANG , etc ., é bastante sobre mudar uma definição de localidade , por exemplo em /usr/share/i18n/locales/de_DE , ou respectivamente, para obter sugestões sobre opções mais apropriadas do que alterar essas configurações do sistema.

A intenção é obter representações de tempo ISO %Y-%m-%d e %H:%M:%S sem efeitos colaterais indesejáveis.

As sugestões que encontrei na net ainda eram inadequadas (por exemplo, definir a localidade para "dinamarquês" não manteria os nomes dos dias da semana escritos com a palavra-chave nativa).

Agora, a única opção que vejo atualmente para obter o comportamento desejado é alterar a definição da minha localidade nativa em /usr/share/i18n/locales/de_DE . Esta não é uma solução perfeita, pois com as atualizações do sistema, esses arquivos alterados podem ser sobrescritos novamente.

Minhas perguntas são:

  1. Existe alguma melhor opção relacionada ao local para obter a função desejada do que alterar o arquivo de código de idioma específico do sistema?
  2. Há algum problema para esperar ao alterar um arquivo de definição de local específico? (E como poderia ser evitado que esse arquivo fosse sobrescrito no caso de atualizações do sistema?)
  3. Seria melhor definir uma variante específica nova de um arquivo de localidade existente e usá-la nas configurações LC_* ? (E como esse novo arquivo / definição seria corretamente conhecido para o sistema?)
  4. Alguma outra sugestão?
por Janis 19.05.2015 / 14:21

1 resposta

5

Em uma pergunta recente , perguntei qual é a melhor prática para esse tipo de mudança. Não houve resposta ainda. No entanto, posso dar-lhe a receita que estou usando, que provou funcionar bem. Todos os programas escolhem a data corretamente.

Minha descrição é para o Ubuntu, mas provavelmente funcionará no Debian e no Mint.

Preparativos

Copie a localidade que você deseja personalizar de /usr/share/i18n/locales para um novo arquivo. Por exemplo,

cp /usr/share/i18n/locales/de_DE /usr/share/i18n/locales/de_DE@isodate

Ajuste all , com exceção das seções LC_TIME para:

copy "de_DE"

Ajuste a seção LC_TIME para corresponder ao resultado desejado. Você pode usar as configurações da minha pergunta vinculada acima como um modelo. Parece que é exatamente isso que você quer.

Se a sua localidade não fizer uso da notação "AM / PM", defina-os como vazios:

t_fmt_ampm ""
am_pm   "";""

Tornando conhecido ao sistema

Edite o arquivo /var/lib/locales/supported.d/local e adicione as informações sobre sua definição de local. Ou seja adicione uma linha como essa se o nome do arquivo acima for isodate , ajuste de outra forma:

de_DE.UTF-8@isodate UTF-8

Se /var/lib/locales/supported.d/local não existir, crie um arquivo com esse nome. Não coloque as alterações no respectivo arquivo en ou de nessa pasta, pois elas podem ser substituídas assim que os pacotes language-pack-*-base e language-pack-* em seu sistema receberem uma atualização.

Agora execute dpkg-reconfigure locales :

# dpkg-reconfigure locales
Generating locales...
  de_DE.UTF-8@isodate... done
  de_DE.UTF-8... up-to-date
Generation complete.

No seu caso, isso indicará que de_DE.UTF-8@isodate locale foi gerado (supondo que você não tenha problemas de sintaxe).

Por último, mas não menos importante, adicione o seguinte a /etc/default/locale :

LC_TIME="de_DE.UTF-8@isodate"

Isso garantirá que somente LC_TIME substitua a localidade padrão definida usando LANG .

Faça o login novamente e você poderá ver a nova data / hora ISO ao usar date ou outras ferramentas usando a respectiva função de tempo de execução da libc.

A intenção aqui é fazer a alteração menos intrusiva e, ao mesmo tempo, não funcionar contra o sistema (por exemplo, contra o gerenciador de pacotes e amigos). É claro que você também pode simplesmente criar uma cópia da sua localidade, instalá-la de maneira semelhante à descrita acima e, em seguida, ajustar LANG . A questão é que, desde que você não queira correr o risco de suas alterações serem substituídas por uma atualização de pacote, você precisará usar uma cópia personalizada (seja qual for a personalização que você escolher; por exemplo, copy ou simplesmente mantenha as seções como estavam no original). E se você altera LANG para apontar para a definição de localidade personalizada completa - ou se você adiciona LC_TIME para apontar apenas para o relevante seção personalizada com o mesmo nome de um arquivo de definição de código de idioma personalizado - você não vai conseguir ajustar uma das configurações globais.

    
por 19.05.2015 / 14:51

Tags