Informações básicas

Informações básicas

Eu criei meus próprios locales personalizados e os coloquei nos /etc/locale.confquais entrarão em vigor com sucesso se eu fizer login em um console virtual (Ctrl+Alt+F2). Na minha sessão do Gnome3, essas variáveis ​​não estão definidas. Para aplicativos de terminal, eu poderia simplesmente colocá-los no, .bashrcmas isso não me ajudará com aplicativos gráficos como Thunderbird e Pidgin.

Eu tentei seguir estas dicas:Configurações de localidade na inicialização do shell não usadas pela sessão do GNOMEe até emulou o bug emLocal - ArchWikicriando um .pam_environmentarquivo, mas os locales ainda são aqueles definidos pelo Gnome3. Existe um diálogo de configuração nas configurações do Gnome, mas só permite definir um conjunto muito limitado de localecombinações predefinidas e não há como personalizá-las.

Os arquivos relevantes em meu diretório inicial:

user@localhost:~$ ls -lah .dmrc .pam_environment .session .xsession .xsessionrc
lrwxrwxrwx. 1 user user 16 12. Jun 08:57 .dmrc -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 11. Jun 20:23 .pam_environment -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 12. Jun 09:09 .session -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 12. Jun 09:07 .xsession -> /etc/locale.conf
lrwxrwxrwx. 1 user user  9 13. Jun 11:22 .xsessionrc -> .xsession
-rw-rw-r--. 1 user user 66 13. Jun 11:13 .profile

user@localhost:~$ cat .profile 
source /etc/locale.conf

O conteúdo de /etc/locale.conf:

LANG="en_US.utf8"
LC_TIME="de_MY.utf8" # NB: de_MY
LC_MONETARY="de_DE.utf8"
LC_PAPER="de_DE.utf8"
LC_NAME="de_DE.utf8"
LC_ADDRESS="de_DE.utf8"
LC_TELEPHONE="de_DE.utf8"
LC_MEASUREMENT="de_DE.utf8"
LC_IDENTIFICATION="de_DE.utf8"

Alguém sabe como definir custom locales no Gnome3?

Responder1

Informações básicas

Testei a solução no Fedora 21 com GNOME Shell 3.14.4, mas acredito que possa ser aplicada em outras versões também.

A primeira coisa a entender é que o ambiente de área de trabalho GNOME substitui as definições de localidade de todo o sistema e, portanto, não é afetado pelo /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ão consistentes da perspectiva de localidade.


Verificando o status da localidade atual

Configurações de todo o sistema

DeGuia do Administrador do Sistema Fedora 21:

As configurações de localidade de todo o sistema são armazenadas no /etc/locale.confarquivo, que é lido na inicialização inicial pelosistemademônio. As configurações de localidade definidas /etc/locale.confsão herdadas por cada serviço ou usuário, a menos que programas individuais ou usuários individuais as 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 nocódigo fonte do gnome-control-centerparece que quando a set_localed_locale()função é chamada, ela define todas as categorias a seguir (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

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 (ele_IL), mas com LC_NAME, LC_MESSAGES deen_USe LC_TIME (com modificado first_weekdaye first_workday) dept_GB.

Capturando 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/. Voltando ao meu exemplo, eu precisava do seguinte:ele_IL,en_USept_GB. Configurei uma pasta de trabalho em minha casa e copiei os arquivos necessários nela:

$ 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

Eu decidi ligar para minha localidadehc_ILe leveiele_ILcomo uma base. As linhas a seguir criam um novo arquivo hc_ILcom o conteúdo he_ILe no caminho substituem todas as ocorrências de uma stringele_ILdentro do arquivo comhc_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 de acordo com nossas necessidades. Abra o arquivo recém-criado ~/custom-locale/hc_ILcom seu editor de texto favorito. eu usovim(possui destaque de sintaxe adequado para arquivos de definição de localidade):

$ vim ~/custom-locale/hc_IL

Para quem ainda não escolheu seu editor favorito evimnão é sua xícara de chá, pode usargedit:)

$ gedit ~/custom-locale/hc_IL

A estrutura do arquivo não é muito complicada. Essencialmente, é construído a partir de seções. Delocalidade(5)páginas de manual:

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 precisar ser copiada, a única palavra-chave válida na definição serácópia deseguido pelo nome da localidade que deve ser copiada.

A noção decópia deé 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 sobre um arquivo de definição de localidade pode ser acessada através de:

$ man 5 locale

Porém, 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_IDENTIFICAÇÃO

    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"
    

    Observação:Todos "categoria.."linhas noLC_IDENTIFICAÇÃOseção foram modificadas durante a criação do arquivo usando sed. Portanto, não precisamos mais tocá-los.

  • LC_TIME

    Copiei a seção completa dept_GBe modificou apenas as linhas que indicam o primeiro dia da semana e o primeiro dia útil:

    first_weekday 1
    first_workday 1
    
  • O resto das categorias deixei como estão ou substituí seu conteúdo pelocópia dediretiva como em:

    LC_NAME
    copy "en_US"
    END LC_NAME
    

É isso, o arquivo de definição está pronto. Não esqueça de salvar o arquivo :)

Compilar e copiar o novo local

A compilação do novo código de idioma é feita usando o seguinte comando comoraizou usandosudo. Substitua hc_ILpela 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 de localidade compilados serão adicionados ao arquivo compactado /usr/lib/locale/locale-archive.

Copie o novo arquivo de definição de código de idioma para o diretório de definições de código de idioma. Substitua hc_ILpela 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 de idioma.

Configurações de todo o sistema

Edite o /etc/locale.confarquivo comoraize defina cada linha que começa com LC_sua nova localidade. 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 de idioma no GNOME, execute o seguinte comando. Substitua hc_ILpela sua localidade:

$ gsettings set org.gnome.system.locale region "hc_IL.utf8"

Validando as novas configurações

A última etapa é 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 de localidade (gráficos e console) e verifique se eles se comportam conforme o esperado com a nova localidade. Por exemplo, se você personalizou LC_TIME você pode executar o datecomando para validar o formato da data:

    $ date +%x
    21/04/15
    

Observação:Tudo foi testado no Fedora 21 com 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.

informação relacionada