Informações básicas
Testei a solução no Fedora 21 com o GNOME Shell 3.14.4, mas acredito que também pode ser aplicada a outras versões.
A primeira coisa a entender é que o ambiente de área de trabalho do GNOME substitui as definições de localidade em todo o sistema e, portanto, não é afetado /etc/locale.conf
. Além disso, pode haver aplicativos que tenham sua própria configuração de localidade e não usem as configurações do sistema ou do GNOME. Neste guia, descreverei uma maneira de personalizar as configurações de localidade de acordo com suas necessidades e o GNOME, e o sistema será consistente da perspectiva do localidade.
Verificando o status atual da localidade
Configurações em todo o sistema
No Guia do Administrador do Sistema do Fedora 21 :
As configurações de localidade em todo o sistema são armazenadas no /etc/locale.conf
arquivo, que é lido na inicialização antecipada pelo daemon systemd . As configurações de localidade configuradas /etc/locale.conf
são herdadas por cada serviço ou usuário, a menos que programas ou usuários individuais os substituam.
Para ver o status atual da localidade, podemos executar:
$ localectl status
System Locale: LANG=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_PAPER=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
VC Keymap: us
X11 Layout: us
Configurações do GNOME
$ gsettings get org.gnome.system.locale region
'en_US.UTF-8'
O GNOME tem apenas uma configuração. Ao dar uma rápida olhada no código-fonte do gnome-control-center , parece que quando a set_localed_locale()
função é chamada, ela define todas as seguintes categorias (LC_TIME, LC_NUMERIC, LC_MONETARY, LC_MEASUREMENT, LC_PAPER) para o mesmo código de idioma definido em org.gnome.system.locale region
.
Misturar diferentes configurações de localidade parece impossível sem criar uma localidade personalizada, mas felizmente não é uma tarefa muito complexa.
Criando localidade personalizada
Eu acho que a maneira mais fácil de explicar é pelo exemplo. No meu caso específico, eu queria ter um código de idioma personalizado, baseado principalmente em hebraico ( he_IL ), mas com LC_NAME, LC_MESSAGES de en_US e LC_TIME (com modificado first_weekday
e first_workday
) de en_GB .
Agarrando arquivos de definição de localidade
Você deve ter uma ideia de quais localidades deseja misturar. Primeiro, precisamos localizar os arquivos de definição relacionados, que podem ser encontrados em /usr/share/i18n/locales/
. Voltar ao meu exemplo, eu precisava o seguinte: he_IL , en_US e en_GB . Configurei uma pasta de trabalho em minha casa e copiei os arquivos necessários para ela:
$ cd /usr/share/i18n/locales
$ mkdir -v ~/custom-locale ; cp -v he_IL en_US en_GB ~/custom-locale/
Criando um novo arquivo de definição
Decidi ligar para minha localidade hc_IL e tomei he_IL como base. As linhas a seguir criam um novo arquivo hc_IL
com o conteúdo de he_IL
e no caminho substitui todas as ocorrências de uma string he_IL dentro do arquivo por hc_IL .
$ cd ~/custom-locale/
$ sed 's/he_IL/hc_IL/g' he_IL > hc_IL
Modificando o novo arquivo de definição
Agora podemos personalizar o novo local para as nossas necessidades. Abra o arquivo recém-criado ~/custom-locale/hc_IL
com seu editor de texto favorito. Eu uso o vim (ele possui destaque de sintaxe apropriado para arquivos de definição de localidade):
$ vim ~/custom-locale/hc_IL
Para quem ainda não escolheu seu editor favorito e o vim não é sua xícara de chá, use o gedit :)
$ gedit ~/custom-locale/hc_IL
A estrutura do arquivo não é muito complicada. Essencialmente, é construído a partir de seções. Nas páginas do manual locale (5) :
A definição de localidade possui uma parte para cada categoria de localidade. Cada parte pode ser copiada de outro código de idioma existente ou pode ser definida do zero. Se a categoria deve ser copiada, a única palavra-chave válida na definição é copy seguida pelo nome do código do idioma que deve ser copiado.
A noção de cópia é muito útil. Isso economiza tempo e o arquivo resultante é claro e conciso. Por exemplo, em vez de copiar seções inteiras, você pode ter:
LC_MESSAGES
copy "en_US"
END LC_MESSAGES
A documentação completa em um arquivo de definição de localidade pode ser acessada via:
$ man 5 locale
Embora, se você deseja apenas criar um código de idioma personalizado, que é uma mistura dos existentes, não há necessidade de entender todos os detalhes.
No meu caso, modifiquei as seguintes categorias e palavras-chave:
LC_IDENTIFICATION
title "Custom Hebrew locale"
source "mydomain.ws"
address "http:////www.mydomain.ws"
contact ""
email "[email protected]"
tel ""
fax ""
language "Hebrew"
territory "Israel"
revision "1.0"
date "2015-04-21"
Nota: Todas as linhas " category .. " na seção LC_IDENTIFICATION foram modificadas durante a criação do arquivo usando sed
. Portanto, não precisamos mais tocá-los.
LC_TIME
Copiei a seção completa de en_GB e modifiquei apenas as linhas que indicam o primeiro dia da semana e o primeiro dia útil:
first_weekday 1
first_workday 1
O restante das categorias que deixei como estão ou substituiu seu conteúdo pela diretiva de cópia, como em:
LC_NAME
copy "en_US"
END LC_NAME
É isso aí, o arquivo de definição está pronto. Não se esqueça de salvar o arquivo :)
Compilar e copiar o novo local
A compilação do novo código do idioma é feita usando o seguinte comando como root ou sudo . Substitua hc_IL
por sua localidade:
$ sudo localedef -c -v -i hc_IL -f UTF-8 hc_IL.UTF-8
Se a compilação for bem-sucedida, os dados do código do idioma compilado serão adicionados ao arquivo morto. /usr/lib/locale/locale-archive
.
Copie o novo arquivo de definição de localidade para o diretório de definições de localidade. Substitua hc_IL
por sua localidade:
$ sudo cp -v hc_IL /usr/share/i18n/locales/
Ativando o novo local
Nesta etapa, queremos configurar o sistema e o GNOME para usar o novo código do idioma.
Configurações em todo o sistema
Edite o /etc/locale.conf
arquivo como root e defina todas as linhas que começarem com LC_
seu novo código de idioma. Por exemplo:
LANG=en_US.UTF-8
LC_NUMERIC=hc_IL.utf8
LC_TIME=hc_IL.utf8
LC_MONETARY=hc_IL.utf8
LC_PAPER=hc_IL.utf8
LC_MEASUREMENT=hc_IL.utf8
Configurações do GNOME
Para ativar o novo código do idioma no GNOME, execute o seguinte comando. Substitua hc_IL
por sua localidade:
$ gsettings set org.gnome.system.locale region "hc_IL.utf8"
Validando as novas configurações
O último passo é validar se tudo funciona conforme o esperado. Para recarregar todas as configurações, o mais fácil para mim foi reiniciar.
- Consulte a seção "Verificando o status da localidade atual" para verificar se a configuração do sistema está correta.
Use o GNOME Shell e aplicativos dependentes da localidade (gráfica e console) e verifique se eles se comportam conforme o esperado com a nova localidade. Por exemplo, se você personalizou LC_TIME, pode executar o date
comando para validar o formato da data:
$ date +%x
21/04/15
Nota: Tudo foi testado no Fedora 21 com o GNOME 3.14. Outras distribuições Linux podem exigir etapas adicionais ou diferentes.
Por favor, comente se você encontrar algum problema com as instruções.