web-dev-qa-db-ja.com

Gnome3でカスタムロケールを設定する(Fedora 20)

独自のカスタムlocalesを作成して/etc/locale.confに配置しました。これは、仮想コンソール(Ctrl + Alt + F2)にログインした場合に正常に有効になります。私のGnome3セッションでは、これらの変数は設定されていません。ターミナルアプリケーションの場合は、.bashrcに配置するだけで済みますが、ThunderbirdやPidginなどのグラフィカルアプリケーションでは役に立ちません。

私はこれらのヒントを追おうとしました: GNOMEセッションでは使用されないシェルの初期化でのロケール設定.pam_environmentファイルを作成して Locale-ArchWiki のバグをエミュレートしました、しかしlocalesはまだGnome3によって設定されたものです。 Gnome設定には構成ダイアログがありますが、事前定義されたlocaleの組み合わせの非常に限られたセットのみを設定でき、それらをカスタマイズする方法はありません。

私のホームディレクトリ内の関連ファイル:

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

/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"

Gnome3でカスタムlocalesを設定する方法を知っている人はいますか?

16
Perseids

背景情報

GNOME Shell 3.14.4を使用してFedora 21でソリューションをテストしましたが、他のバージョンにも適用できると思います。

最初に理解しておくべきことは、GNOMEデスクトップ環境はシステム全体のロケール定義をオーバーライドするため、_/etc/locale.conf_の影響を受けないことです。さらに、独自のロケール構成を持ち、システムやGNOME設定をまったく使用しないアプリケーションが存在する可能性があります。このガイドでは、ニーズとGNOMEに合わせてロケール設定をカスタマイズする方法について説明します。システムはロケールの観点から一貫しています。


現在のロケールステータスの確認

システム全体の設定

Fedora 21システム管理者ガイド から:

システム全体のロケール設定は_/etc/locale.conf_ファイルに格納され、 systemd デーモンによってブートの初期に読み取られます。 _/etc/locale.conf_で構成されたロケール設定は、個々のプログラムまたは個々のユーザーが上書きしない限り、すべてのサービスまたはユーザーに継承されます。

現在のロケールステータスを確認するには、次のコマンドを実行します。

_$ 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
_

GNOME設定

_$ gsettings get org.gnome.system.locale region
'en_US.UTF-8'
_

GNOMEの設定は1つだけです。 gnome-control-centerのソースコード をざっと見てみると、set_localed_locale()関数が呼び出されると、次のすべてのカテゴリ(LC_TIME、LC_NUMERIC、LC_MONETARY)が設定されるようです、LC_MEASUREMENT、LC_PAPER)を_org.gnome.system.locale region_で定義された同じロケールに変更します。

カスタムロケールを作成しないと、異なるロケール設定を混在させることは不可能に思えますが、幸い、それほど複雑な作業ではありません。


カスタムロケールの作成

私が説明する最も簡単な方法は例によると思います。私の特定のケースでは、主にヘブライ語( he_IL )に基づくが、LC_NAME、 en_US のLC_MESSAGES、およびLC_TIMEを使用するカスタムロケールが必要でした。 (変更された_first_weekday_および_first_workday_を使用) en_GB から。

ロケール定義ファイルの取得

どのロケールを混在させたいのかがわかるはずです。まず、_/usr/share/i18n/locales/_にある関連定義ファイルを見つける必要があります。私の例に戻ると、 he_IL en_US および en_GB が必要でした。私は自宅に作業フォルダをセットアップし、それに必要なファイルをコピーしました:

_$ cd /usr/share/i18n/locales
$ mkdir -v ~/custom-locale ; cp -v he_IL en_US en_GB ~/custom-locale/
_

新しい定義ファイルの作成

私は自分のロケールを hc_IL と呼ぶことにし、 he_IL をベースとして使用しました。次の行は、_hc_IL_の内容で新しいファイル_he_IL_を作成し、途中でファイル内のすべての文字列 he_IL hc_IL

_$ cd ~/custom-locale/
$ sed 's/he_IL/hc_IL/g' he_IL > hc_IL
_

新しい定義ファイルの変更

これで、必要に応じて新しいロケールをカスタマイズできます。新しく作成したファイル_~/custom-locale/hc_IL_をお気に入りのテキストエディターで開きます。私は vim を使用します(ロケール定義ファイルに適切な構文強調表示があります):

_$ vim ~/custom-locale/hc_IL
_

お気に入りのエディターをまだ選択しておらず、 vim がお茶ではない場合は、 gedit を使用できます。

_$ gedit ~/custom-locale/hc_IL
_

ファイル構造はそれほど複雑ではありません。基本的に、セクションから構成されます。 locale(5) manページから:

ロケール定義には、ロケールカテゴリごとに1つの部分があります。各パーツは、別の既存のロケールからコピーすることも、最初から定義することもできます。カテゴリをコピーする必要がある場合、定義内の唯一の有効なキーワードは copy の後にコピーするロケールの名前が続きます。

copy の概念は非常に便利です。時間を節約し、結果のファイルは明確で簡潔です。たとえば、セクション全体をコピーする代わりに、次のようにすることができます。

_LC_MESSAGES
copy "en_US"
END LC_MESSAGES
_

ロケール定義ファイルに関する完全なドキュメントには、次の方法でアクセスできます。

_$ man 5 locale
_

ただし、既存のロケールを組み合わせたカスタムロケールを作成するだけの場合は、すべての詳細を理解する必要はありません。

私の場合、次のカテゴリとキーワードを変更しました。

  • 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"
    _

    注: LC_IDENTIFICATION セクションのすべての「category ..」行はsedを使用してファイル作成中に変更されます。ですから、もう触る必要はありません。

  • LC_TIME

    en_GB からセクション全体をコピーし、週の最初の日と最初の就業日を示す行のみを変更しました。

    _first_weekday 1
    first_workday 1
    _
  • 残りのカテゴリはそのままにしておくか、次のように copy ディレクティブでコンテンツを置き換えました。

    _LC_NAME
    copy "en_US"
    END LC_NAME
    _

以上で定義ファイルの準備は完了です。ファイルを保存することを忘れないでください:)

新しいロケールをコンパイルしてコピーする

新しいロケールのコンパイルは、 root として次のコマンドを使用するか、 Sudo を使用して行われます。 _hc_IL_を実際のロケールに置き換えます。

_$ Sudo localedef  -c -v -i hc_IL -f UTF-8 hc_IL.UTF-8
_

コンパイルが成功すると、コンパイルされたロケールデータがアーカイブファイル_/usr/lib/locale/locale-archive_に追加されます。

新しいロケール定義ファイルをロケール定義ディレクトリにコピーします。 _hc_IL_を実際のロケールに置き換えます。

_$ Sudo cp -v hc_IL /usr/share/i18n/locales/
_

新しいロケールのアクティブ化

このステップでは、新しいロケールを使用するようにシステムとGNOMEを構成します。

システム全体の設定

_/etc/locale.conf_ファイルを root として編集し、_LC__で始まるすべての行を新しいロケールに設定します。例えば:

_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
_

GNOME設定

GNOMEで新しいロケールをアクティブにするには、次のコマンドを実行します。 _hc_IL_を実際のロケールに置き換えます。

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

新しい設定の検証

最後のステップは、すべてが期待どおりに機能することを検証することです。すべての設定をリロードするには、再起動するのが最も簡単でした。

  • 「現在のロケールステータスの確認」セクションを参照して、システム構成が正しいことを確認してください。
  • GNOME Shellとロケール依存のアプリケーション(グラフィカルおよびコンソール)を使用し、それらが新しいロケールで期待どおりに動作することを確認します。例えば。 LC_TIMEをカスタマイズした場合は、dateコマンドを実行して日付形式を検証できます。

    _$ date +%x
    21/04/15
    _

注:すべてはGNOME 3.14を搭載したFedora 21でテストされました。他のLinuxディストリビューションでは、追加の手順または異なる手順が必要になる場合があります。

手順に問題がある場合はコメントしてください。

9
dchrome