web-dev-qa-db-ja.com

Debian 9.2.1 Stretchに付属するKDE 5の事前定義された日時形式をハックして変更する方法は?

Debian 9.2.1 Stretch上のKDE 5の事前定義された日時形式をハックして変更したいと思います。

定義済みフォーマットは、キックオフランチャー>コンピューター>システム設定>個人設定>地域設定>フォーマットの定義済みフォーマットのリストから選択できます。

(「フォーマット設定」ダイアログのスクリーンショットについては、SuperUserサイトの https://superuser.com/q/116228 を参照してください。)

形式の効果は、[形式の設定]ダイアログ自体に表示されます。また、KDEデスクトップのDolphinファイルマネージャの詳細ビューの[日付]フィールドにも表示され、Dolphin上のファイルのプロパティにも表示されます。

残念ながら、事前定義されたフォーマットはどれも私に適していません。 en_US( "米国-アメリカ英語")の日付時刻形式は、私の観点から特にひどいものです。一方、en_SE( "スウェーデン語-英語")の短い日付時刻形式はISO 8601であり、希望する形式に近いです。それにもかかわらず、en_SEでさえ私を完全には満足させません。特にその長いフォーマットは私を失望させます。

この形式設定ダイアログでは、カスタム形式を自由に作成することはできません。事前に定義されたフォーマットから選択するだけです。

したがって、私は事前定義されたフォーマットをハッキングして変更したいと思います。方法を教えてください。

ディレクトリ/usr/share/i18n/localesにはフォーマットファイルが含まれています。ファイル名は、en_USen_GBfr_FRなどの形式名と同じです。ただし、Debian 9.2.1に付属のKDEは/usr/share/i18n/localesのフォーマットファイルを考慮しません。これらのフォーマットファイルを変更したり、これらのファイルをすべて削除したりしても、Debian 9.2.1でのKDEの動作には影響しません。このディレクトリにはen_SEがありませんが、それでもen_SEが[フォーマット設定]ダイアログに表示されます。

定義済みのフォーマットがKDEでハードコーディングされているのでしょうか。

Debian 9.0 Stretchが2017-06-17にリリースされたことに注意してください。 Debian 9.2.1に付属するKDEコンポーネントのバージョンは次のとおりです。

plasmashell --version
# plasmashell 5.8.6

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

TheEzekielProjectは彼の投稿で主張しています( https://www.linuxquestions.org/questions/linuxquestions-org-member-success-stories-23/guide-to-setting-custom-date-format-in-recent- versions-of-kde-4175595458-print / )は、ディレクトリ/usr/share/i18n/localesのフォーマットファイルを変更して、カスタム日付時刻フォーマットを作成できました。彼がテストしたシステムは、KDEプラズマ5.8.2およびKDEフレームワーク5.27.0を搭載したKali Linux 2016.2、KDEプラズマ5.7.5およびKDEフレームワーク5.26.0を搭載したKubuntu 16.10です。彼のシステムは私のものより古い。

私は彼の方法を試しました。フォーマットファイルのLC_TIMEの下で、d_t_fmtd_fmtt_fmtおよびt_fmt_ampmを変更し、locale-genなどを実行しました。しかし、彼の方法はDebian 9.2.1のKDEに影響を与えないことが判明しました。また、彼の投稿へのコメントは、彼の方法がネオン(プラズマ5.10)で失敗することを訴えています。

ちなみに、私の質問はSuperUserサイトのquestions/1162283/use-iso-time-and-date-format-in-kde-5の複製ではありません。質問1162283はISO日付時刻形式を要求し、Marco Lussettiの回答、つまり、事前定義された形式のリストからen_SEを選択するだけで満たされています。私の質問は、事前定義されたフォーマットを超えるハックを求めています。

6
i7pj3qnuz

これを(ほぼ)完全に調査するのに半日かかりましたが、私はそれを行う方法を見つけたと思います、そしてあなたはそれが好きではないでしょう...

ソリューション:

一言で言えば、

KDEはQTのQLocaleのみを使用します。 QTのコアライブラリコードの深いqlocale_data_p.h内でハードコーディングされたデータを使用するもの.

このデータは明らかに、QTソースコードパッケージのutil/local_database/内のいくつかのPythonスクリプトを使用して、Unicode Consortiumの「 Common Locale Data Repository 」から手動で生成されています。それ自体は、ソースコードの一部でもではないと私は確信しています。まさしく、コンピュータ上のあらゆる種類の構成またはデータファイルを使用します。

これを行う唯一の方法は、…

  1. CLDRファイルをパッケージとして http://unicode.org/Public/cldr/latest/core.Zip (またはcldr-common-*。Zipのいずれかでダウンロードします。どちらも含まれているようです。同じ)、または https://www.unicode.org/repos/cldr/trunk/ にあり、common/main/でXMLファイルを抽出します。
    Gentooにはapp-i18n/unicode-cldr btwというパッケージもあります。
  2. QTコアソースコードを取得します。ディストリビューションのリポジトリから、それを解凍します。
  3. util/local_database/のスクリプト(cldr2qlocalexml.pyqlocalexml2cpp.pyなど)を選択した言語のXMLファイルとともに使用して、静的なqlocale_data_p.hを再生成します。
  4. 次に、通常どおりパッケージをコンパイルしてインストールします。

そして、qlocale_data_p.hを含む他のすべてのパッケージを再コンパイルすることを忘れないでください。

または、Gentooでは、次のように永続的なパッチを作成します:

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

NOWは上記の変更をbではなく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/^/=/')

最終的な考え

完全に正直に言うと、これらのPythonスクリプトが実際にXMLファイルを渡すだけで実際に機能するかどうかは確認しませんでした。その時点で、わざわざやめたくて火でそれを殺す。:)

Patrick Bateman axe murderer

誰かが実際に実際にそれをしたいのであれば、報告してください、そして私はこの答えを更新します。 (または、可能であれば自分で行う)


ここに私がそこに着いた方法があります:

  • タスクバーの時計を右クリックして、KDEの時間形式設定ダイアログを開きました。
  • 次に、htopを使用して、明らかなkcmshell5 formatsを含む、最近開始されたプロセスを見つけました。
  • htoplistオープンファイル機能を使用して、「フォーマット」でフィルタリングし、/usr/lib64/qt5/plugins/kcm_formats.soを見つけました。
  • Gentooのequery belongs /usr/lib64/qt5/plugins/kcm_formats.soを利用して、パッケージkde-plasma/plasma-desktopを特定できました。
  • ソースファイルを解凍した後、addLocaleToComboQLocaleを使用し、kcms/formats/kcmformats.cppも含めた<QLocale>をすぐに見つけました。
  • このQLocalelocate -i QLocale/usr/include/qt[5]/QtCore/qlocale.hに存在することがわかります。言語、スクリプトなどのいくつかの生成された列挙が含まれていました。
  • 別のequery belongs /usr/include/qt[5]/QtCore/qlocale.hdev-qt/qtcore/qtcoreを指し示し、後でソースファイルを解凍します…
  • …私はすでにそれがすべて何らかのツールで生成されたという直感を感じていました。 util/を調べたところ、util/local_database/READMEに「local_databaseを使用して、Common Locale Data Repository(ローカライズされた名前のデータベース(日付形式、国名など)))。
  • それを聞いたことがなかったので、私は 調べました で、明らかにUnicode Consortiumによるものです。 CLDRロケールを含むディレクトリへのパスで呼び出されるため、cldr2qlocalexml.pyのコードはあまり役に立ちませんでした。その結果はqlocalexml2cpp.pyに使用されますが、これはsrc/corelib/tools/qlocale_data_p.hを生成します。これにはhugehard-codedすべてのロケールデータのテーブル。そして、そのファイルはすでにソースに存在していました。だから…ええ、それは(部分的に?)ハードコードされています。
    facepalm
  • しかし、CLDR XMLファイルはどこにも見つかりませんでした。そのため、以前に準備したqlocale_data_p.hを使用するだけだと思います。これはオープンソースの精神ではあまりありません。しかし、上記のように、少なくとも自分でそれを行うことができます。
4
Evi1M4chine

1年後、AFAICTの状況はまったく同じです。私は、このプロセスをOpenSUSE Tumbleweedで実行して、en_USに希望する日付形式を設定しました。手順は次のとおりです。[SOMEPATH](角かっこを含む)を好みに置き換えます。これを投稿してから、CLDRのバージョン番号が35.1から変更されている場合は、CLDRのバージョン番号を更新することをお勧めします。

  1. Sudo zypper si libqt5-qtbase#Qt Coreのソースrpmをインストールします
  2. cd /usr/src/packages/SPECS
  3. Sudo rpmbuild -bp libqt5-qtbase.spec
  4. cd [SOMEPATH]
  5. curl http://unicode.org/Public/cldr/35.1/core.Zip --output core.Zip
  6. unzip core.Zip
  7. nano common/main/en.xml#または変更する言語/地域-変更する日付形式またはローカルの他のパラメータを見つけ、心ゆくまで編集します。
  8. cd /usr/src/packages/BUILD/qtbase-everywhere-src-5.13.0/util/local_database/
  9. ./cldr2qlocalexml.py [SOMEPATH]/common/main > [SOMEPATH]/localesForQt.xml
  10. Sudo ./qlocalexml2cpp.py [SOMEPATH]/localesForQt.xml /usr/src/packages/BUILD/qtbase-everywhere-src-5.13.0/
  11. cd /usr/src/packages/SPECS
  12. Sudo rpmbuild --noprep --noclean -bb libqt5-qtbase.spec#コンピューターの速度に応じて、映画を見に行きます...
  13. ビルドが完了すると、/ usr/src/packages/RPMS/[your_architecture]に多数のRPMSが作成されます。ディレクトリをそのディレクトリに変更します。
  14. Sudo zypper install *Core*
  15. 再起動してログインし直すと、変更が表示されます。

ほら、KDE ​​/ Qtの設定は面白くて便利ではありませんか? ;-)

0
Glen Whitney