Como posso personalizar uma localidade do sistema?

17

No sistema Administração Suporte ao idioma Texto. Eu só posso escolher locais padrão, mas gostaria de ajustar. Por exemplo, no Windows eu poderia personalizar coisas como formato de hora e data, medir unidades, separador decimal, moeda, etc manualmente - como posso fazer isso no Ubuntu?

    
por Ivan 13.01.2011 / 06:34

2 respostas

21

Esta resposta demonstrará como personalizar totalmente uma localidade, usando opcionalmente uma localidade existente como base. O tipo de localidade que será usado nesta resposta é o i18n type; Esse tipo de localidade estará implícito em todas as menções à palavra "locale" no corpo da resposta.

Encontre um guia

A primeira coisa que você precisa para personalizar uma localidade é conhecer o formato da localidade. Este editor de local da web tem uma descrição abrangente de cada campo em uma localidade, apesar de não ser utilizável por qualquer pessoa em um direito -way maneira. Este será o guia para usar.

Ferramentas necessárias

As únicas ferramentas de que você precisa para trabalhar com localidades são

  1. Um editor de texto. Qualquer coisa serve, embora o VIM seja excelente.
  2. Um conversor de texto para unicode. Seria mais esperado que você não tivesse um, por isso vou fornecer-lhe um simples. Leia a próxima subseção para obtê-lo.

Eu recomendo que você crie um diretório e salve tudo relacionado ao trabalho que você fará no local.

Conversor de texto para unicode (encodestr)

NOTA: se você estiver usando caracteres não comuns , você pode ter problemas com o script que eu escrevo abaixo; talvez você queira dar uma olhada nos scripts alternativos vinculados por nass .

Salve o seguinte código em um arquivo. Este arquivo será identificado pelo seu sistema como um script python, o que é certo, porque é um. Este guia assume que você chamou o script encodestr .

#!/usr/bin/python

def encode(string):
    newstring = str()
    for ch in string:
        newstring += "<U%04X>" % ord(ch)
    return newstring

if __name__ == '__main__':
    import sys
    print encode(sys.argv[1])

Depois de salvá-lo, conceda a permissão de execução do arquivo - isso será útil. Você pode fazer isso usando o nautilus ou executando a partir do terminal o seguinte comando, no diretório em que você salvou o script: chmod +x encodestr .

Agora você pode testar esse script executando no mesmo diretório: ./encodestr hello . Você deve obter uma saída igual a <U0068><U0065><U006C><U006C><U006F> .

Modificar uma localidade existente

Modificar uma localidade existente é o caso mais fácil, pois, idealmente, você escolherá uma localidade que atenda às suas necessidades quase que totalmente, e nesse caso você precisará fazer apenas pequenas modificações. Para adaptá-lo, você pode usar o guia para saber quais das seções são as que deseja alterar e como alterá-las. Todos os locais instalados residem em /usr/share/i18n/locales , porém o guia contém praticamente todos os locais já criados.

No entanto, a primeira coisa que você notará quando abrir uma localidade é que você lerá palavras em inglês tanto quanto códigos <UXXXX> estranhos. Você precisará ser capaz de criar esses códigos - é aqui que o script encodestr vem.

Quando você sabe quais seções você tem que mudar, você precisa conhecer cada campo contido na seção.

  

Por exemplo, a seção LC_TIME contém o campo t_fmt e muitos outros. Cada campo tem sua própria descrição no guia .

Agora que você sabe quais campos modificar, use o guia novamente para descobrir que valores o campo aceita .

  

Por exemplo, o campo t_fmt aceita texto e as comuns variáveis strfmt .

Quando você souber o que escrever nos campos que deseja modificar, execute o texto no script encodestr para obter seu equivalente codificado.

NOTA: Nem todos os campos precisam ser codificados, use uma localidade existente como referência, se necessário.

  

Por exemplo, se você quiser ter o formato de hora Time: %T no campo t_fmt , execute ./encodestr "Time: %T" ; isso retornará <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054> e você terá a linha t_fmt <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054> em sua localidade (em sua respectiva seção, é claro).

Depois de ter modificado todos os campos desejados, você precisará continuar instalando o código de idioma no sistema, para que ele possa ser usado. Prossiga para a seção de instalação para isso.

Criando uma localidade do zero

Ao contrário de modificar um, o outro método que você pode usar para criar sua localidade personalizada está trabalhando nele do zero. Isso não é muito difícil se - novamente - você usar o guia . Aqui está uma dica útil: você pode copiar seções de outras localidades sem os métodos copiar e colar . Você só precisa seguir este formato:

LC_SECTION
copy "locale"
END LC_SECTION

Em que LC_SECTION é a seção que você deseja modificar e locale é a localidade da qual você deseja copiar essa seção.

  

Por exemplo, se você quiser copiar o formato de horário na localidade em inglês, você terá esse texto seu arquivo de localidade personalizado:

LC_TIME
copy "en_GB"
END LC_TIME
  

E isso economiza muito trabalho e garante que qualquer alteração feita na localidade referenciada seja espelhada para a sua.

Instalando sua localidade personalizada

As etapas que mostrarei abaixo podem não ser ideais, mas funcionam.

  1. Compile sua localidade. Não entre em pânico! Isso não leva tempo. Basta executar o comando sudo localedef -i custom -f UTF-8 custom.UTF-8 -c -v , em que custom é o nome da sua localidade.

  2. Copie sua localidade para o diretório /usr/share/i18n/locales/ . Você definitivamente precisará de privilégios sudo para fazer isso, e você pode fazê-lo com o comando sudo cp locale /usr/share/i18n/locales/ onde locale é o nome do arquivo da sua localidade personalizada.

  3. Especifique sua localidade em /var/lib/locales/supported.d/ . Por exemplo, crie um nome de arquivo /var/lib/locales/supported.d/asd e adicione a linha custom UTF-8 , em que custom é o nome da sua localidade.

  4. Execute o comando magic. Na verdade, não sei exatamente o que esse comando faz, mas é crucial. Execute sudo locale-gen . É mais provável que gere referências aos locais disponíveis onde necessário.

  5. Diga ao seu sistema para usar a localidade. Se você quiser que o código do idioma seja usado em todo o sistema, modifique o arquivo /etc/environment . Se não, você pode modificar seu arquivo ~/.profile , ou qualquer outro que seja originado na inicialização. Se você não sabe o que significa este último, não se preocupe, apenas use o arquivo ~/.profile . Para saber o que você precisa escrever, primeiro execute o comando locale . Ele deve emitir uma lista com itens como LANGUAGE , LC_MESSAGES , LC_CTYPE e muitos outros. Você escreverá, para cada uma das seções desejadas (listadas pelo comando anterior), em linhas separadas, isso SECTION="locale" onde SECTION é a seção e locale o nome da sua localidade personalizada.

  

Por exemplo, se você quiser usar o formato de horário da Holanda, mas o idioma inglês, escreva:

LANGUAGE="en_GB:en"
LC_TIME="nl_NL"

NOTA: Se você quiser usar uma localidade para cada configuração de local, escreva LC_ALL="locale" em que locale é o nome da sua localidade personalizada. Se você quiser usar uma localidade para tudo, menos para o idioma, poderá escrever LANG="locale" e (em outra linha, é claro) LANGUAGE="locale":XX , em que XX é o código de duas letras para o idioma desejado.

  

Por exemplo, se você quiser usar o idioma holandês e o idioma inglês, poderá usar:

LANG="nl_NL"
LANGUAGE="nl_NL:en"

Você terminou

Na próxima vez que você fizer login, sua localidade deverá estar em uso. Você pode testar isso executando o comando locale novamente.

Por favor, comente sobre inconsistências ou declarações falsas neste guia!

    
por Severo Raz 12.07.2012 / 09:49
7

Não tenho certeza do tipo de personalização que você deseja, mas você pode definir algumas variáveis de localidade usando seu ~/.locale . Por exemplo, para obter mensagens em inglês, mas tempo alemão e os que eu uso

export LC_ALL=""
export LANG="en_GB.utf8"
export LC_CTYPE="de_DE.utf8"
export LC_NUMERIC="de_DE.utf8"
export LC_TIME="de_DE.utf8"
export LC_COLLATE="de_DE.utf8"
export LC_MONETARY="de_DE.utf8"
export LC_MESSAGES="en_GB.utf8"
export LC_PAPER="de_DE.utf8"
export LC_NAME="en_GB.utf8"
export LC_ADDRESS="de_DE.utf8"
export LC_TELEPHONE="de_DE.utf8"
export LC_MEASUREMENT="de_DE.utf8"
export LC_IDENTIFICATION="de_DE.utf8"

Também é possível gerar localidades personalizadas. Veja por exemplo este guia para datas.

    
por Carsten Thiel 13.01.2011 / 10:00