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 / 05: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 / 07: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 / 09:00