Como hackear e modificar um formato de data / hora pré-definido do KDE 5 que vem com o Debian 9.2.1 Stretch?

4

Eu gostaria de hackear e modificar um formato de data / hora predefinido do KDE 5 no Debian 9.2.1. Stretch.

Um formato predefinido pode ser selecionado na lista de formatos predefinidos no Iniciador do Kickoff > Computador > Configurações do sistema > Personalização > Configurações regionais > Formatos.

(Para a captura de tela da caixa de diálogo Configurações dos formatos, consulte o link no site do SuperUser.)

O efeito do formato aparece na própria caixa de diálogo Configurações de formatos e também aparece no campo Data da visualização Details do Dolphin File Manager da área de trabalho do KDE e também nas Propriedades de qualquer arquivo no Dolphin.

Infelizmente, nenhum dos formatos predefinidos me serve. O formato de data e hora de en_US ("Estados Unidos - Inglês Americano") é particularmente terrível do meu ponto de vista. Por outro lado, o formato de data abreviada de en_SE ("Sweden - English") é ISO 8601 e está próximo do que eu quero. No entanto, mesmo en_SE não me satisfaz completamente; especialmente seu formato longo me decepciona.

Esta caixa de diálogo de configurações de formatos nunca permite criar livremente formatos personalizados. Ele só te dá uma escolha de formatos pré-definidos.

Assim, gostaria de hackear e modificar um formato predefinido. Por favor, deixe-me saber como.

O diretório /usr/share/i18n/locales contém arquivos de formato. Os nomes de arquivos são idênticos aos nomes de formato, como en_US , en_GB , fr_FR e assim por diante. No entanto, o KDE que veio com o Debian 9.2.1 não se preocupa com os arquivos de formato em /usr/share/i18n/locales . A modificação desses arquivos de formato ou até a exclusão de todos esses arquivos nunca afeta o comportamento do KDE no Debian 9.2.1. Este diretório ainda não possui en_SE e, no entanto, en_SE aparece na caixa de diálogo Configurações de formatos.

Gostaria de saber se os formatos predefinidos são codificados no KDE.

Note que o Debian 9.0 Stretch foi lançado em 2017-06-17. As versões dos componentes do KDE que vieram com o Debian 9.2.1 seguem:

plasmashell --version
# plasmashell 5.8.6

kf5-config --version
# Qt: 5.7.1
# KDE Frameworks: 5.28.0
# kf5-config: 1.0

TheEzekielProject afirma em seu post ( link ) que ele conseguiu criar um formato personalizado de data e hora, modificando um arquivo de formato no diretório /usr/share/i18n/locales . Os sistemas que ele testou são o Kali Linux 2016.2 rolando com o KDE Plasma 5.8.2 e o KDE Frameworks 5.27.0, e o Kubuntu 16.10 com o KDE Plasma 5.7.5 e o KDE Frameworks 5.26.0. Seus sistemas são mais antigos que os meus.

Eu tentei o método dele. Em um arquivo de formato, em LC_TIME , alterei d_t_fmt , d_fmt , t_fmt e t_fmt_ampm e executei locale-gen e assim por diante. No entanto, seu método acabou por não ter nenhum efeito sobre o KDE no Debian 9.2.1. Também um comentário ao seu post reclama que seu método falha no Neon (plasma 5.10).

A propósito, minha pergunta não é uma duplicata de questions/1162283/use-iso-time-and-date-format-in-kde-5 no site do SuperUser. A questão 1162283 pediu formato de data e hora ISO, e foi cumprida pela resposta da Marco Lussetti, isto é, simplesmente selecionando en_SE da lista de formatos pré-definidos. Minha pergunta pede um hack para ir além de formatos pré-definidos.

    
por i7pj3qnuz 14.12.2017 / 11:41

1 resposta

2

Levei meio dia para (quase) investigar completamente isso, mas acho que descobri como fazer isso e você não vai gostar ...

A solução:

Em poucas palavras,

O KDE usa apenas o QLocale do QT. Que usa dados codificados em qlocale_data_p.h , no código da biblioteca principal do QT.

Esses dados aparentemente são gerados manualmente a partir do Common Locale Data Repository do Unicode Consortium, usando vários scripts Python dentro de util/local_database/ do pacote de código-fonte QT. Que em si não é parte do código-fonte, eu tenho certeza. Deixe sozinho, usando qualquer tipo de configuração ou arquivos de dados no seu computador.

Então, a única maneira de fazer isso é ...

  1. Faça o download dos arquivos CLDR, como um pacote, no link (ou cldr-common- * .zip, ambos parecem conter o mesmo), ou no link e extrair os arquivos XML em common/main/ .
    O Gentoo também tem um pacote chamado app-i18n/unicode-cldr btw.
  2. Adquira o código-fonte principal do QT, por exemplo do repositório da sua distribuição e descompacte-o.
  3. Use os scripts em util/local_database/ (como cldr2qlocalexml.py e qlocalexml2cpp.py ), com o arquivo XML da sua preferência, para gerar novamente a estatística qlocale_data_p.h .
  4. Em seguida, compile e instale o pacote normalmente.

E não se esqueça de recompilar todos os outros pacotes que incluam qlocale_data_p.h .

Ou, no Gentoo, faça um patch duradouro com:

ebuild $(equery w dev-qt/qtcore:5) prepare
pushd /var/tmp/portage/dev-qt/qtcore-5*/work/ # assuming default Portage build directory
mv qtbase-opensource-src-5.9.3 a
cp -a a b

Agora faça as alterações acima em b e não em a .

mkdir -p /etc/portage/patches/dev-qt/$(basename $(dirname $(pwd))) # only for this version
#mkdir -p /etc/portage/patches/dev-qt/qtcore # for all versions
diff -ur a b > /etc/portage/patches/dev-qt/qtcore*/my-locale.patch
rm -rf a b
popd
ebuild $(equery w dev-qt/qtcore:5) clean
# Rebuild all packages that depend on it, just to be sure. May be optional.
emerge -1 dev-qt/qtcore:5 $(equery d dev-qt/qtcore:5 | sed 's/^/=/')

Considerações finais

Para ser franco, não verifiquei se esses scripts Python funcionavam apenas passando um arquivo XML. Naquele momento, eu simplesmente parei de me incomodar e queria matá-lo com fogo . :)

Sealguémquiserrealmentefazerissonaprática,porfavorinforme,eeuatualizareiestaresposta.(Oufaçavocêmesmo,sepuder)

Vejacomochegueilá:

  • EuabriacaixadediálogodeconfiguraçãodeformatosdehoradoKDE,clicandocomobotãodireitodomousenorelógiodabarradetarefas.
  • Então,comhtop,encontreiosprocessosiniciadosmaisrecentemente,incluindooóbviokcmshell5formats.
  • Usandoorecursohtop'listdearquivosabertos,filtramospor"formato" e encontrei /usr/lib64/qt5/plugins/kcm_formats.so .
  • Com a ajuda do equery belongs /usr/lib64/qt5/plugins/kcm_formats.so do Gentoo, consegui identificar o pacote kde-plasma/plasma-desktop .
  • Depois de descompactar seu arquivo de origem, eu encontrei rapidamente kcms/formats/kcmformats.cpp , cujo addLocaleToCombo usou o QLocale e incluiu <QLocale> também.
  • Este QLocale pode então ser encontrado com locate -i QLocale para residir em /usr/include/qt[5]/QtCore/qlocale.h . Incluiu algumas enumerações geradas das linguagens, scripts, etc.
  • Outro equery belongs /usr/include/qt[5]/QtCore/qlocale.h me aponta para dev-qt/qtcore/qtcore e descompacta o arquivo de origem depois ...
  • … eu já tive uma sensação, que tudo foi gerado com alguma ferramenta. Então eu olhei para util/ e encontrei util/local_database/README afirmando que “local_database é usado para gerar dados qlocale do Common Locale Data Repository (banco de dados para nomes localizados (como formatos de datas, nomes de países, etc.)) . ".
  • Nunca ouvi falar disso, eu procurei , e é aparentemente pelo Unicode Consortium . O código de cldr2qlocalexml.py não era muito útil, como é chamado com o caminho para um diretório contendo as localidades CLDR. Seu resultado é usado para qlocalexml2cpp.py , que gera o arquivo src/corelib/tools/qlocale_data_p.h , que inclui tabelas enormes codificadas de todos os dados de localidade. E esse arquivo já existia na fonte. Então… sim, é (parcialmente?) Hard-coded.
  • Mas os arquivos CLDR XML não foram encontrados em lugar algum. Então eu suponho que apenas usa o qlocale_data_p.h previamente preparado. Que não é muito no espírito do código aberto. Mas pelo menos você pode fazer isso sozinho, como descrito acima.
por 27.01.2018 / 18:06