システムで→ 管理→ 言語サポート→ 文章。標準のロケールしか選択できませんが、微調整したいと思います。たとえば、Windowsでは、時刻と日付の形式、測定単位、小数点、通貨などを手動でカスタマイズできます。Ubuntuでこれを行うにはどうすればよいですか?
ベストアンサー
この回答は、ロケールを完全にカスタマイズする方法を示しています。オプションで、既存のロケールをベースとして使用します。この回答で使用されるロケールのタイプは、i18n
です。 タイプ;このようなタイプのロケールは、回答の本文にある「ロケール」という単語のすべての言及に含まれます。
ガイドを探す
ロケールをカスタマイズするために最初に必要なことは、ロケールの形式を知ることです。このWebロケールエディタには、誰もがすぐに使用できるわけではありませんが、ロケール内のすべてのフィールドの包括的な説明があります。これが使用ガイドになります。
必要なツール
ロケールを操作するために必要なツールは
だけです。- テキストエディタ。 VIMは優れていますが、何でも構いません。
- テキストからUnicodeへのコンバーター。持っていないことが最も予想されるので、簡単なものを提供します。次のサブセクションを読んで入手してください。
ディレクトリを作成し、そのロケールで行う作業に関連するすべてのものをそのディレクトリに保存することをお勧めします。
テキストからUnicodeへのコンバータ(encodestr)
注: 一般的でない文字を使用している場合 以下に書くスクリプトに問題があるかもしれません。 nassによってリンクされている代替スクリプトを確認することをお勧めします 。
次のコードをファイルに保存します。このファイルは、システムによってPythonスクリプトとして識別されますが、Pythonスクリプトであるため問題ありません。このガイドでは、スクリプトをencodestr
と呼んでいることを前提としています。 。
#!/usr/bin/env python3
import sys
def main():
if len(sys.argv) != 2:
exit(f'Usage: {sys.argv[0]} <string to encode>')
print(encode(sys.argv[1]))
def encode(s):
return ''.join(f"<U{ord(c):04X}>" for c in s)
if __name__ == '__main__':
sys.exit(main())
保存したら、ファイルの実行権限を付与します。これは便利です。これは、nautilusを使用するか、スクリプトを保存したディレクトリでターミナルから次のコマンドを実行することで実行できます。chmod +x encodestr
。
これで、同じディレクトリ./encodestr hello
で実行してこのスクリプトをテストできます。 。 <U0068><U0065><U006C><U006C><U006F>
に等しい出力が得られるはずです。 。
既存のロケールを変更する
既存のロケールを変更するのが最も簡単なケースです。理想的には、ニーズにほぼ完全に適合するロケールを選択します。この場合、わずかな変更のみを行う必要があります。それを調整するために、ガイドを使用して、どのセクションを変更したいか、およびそれらをどのように変更できるかを知ることができます。インストールされているすべてのロケールは、/usr/share/i18n/locales
にあります。 ただし、ガイドにはこれまでに作成されたほとんどすべてのロケールが含まれています。
ただし、ロケールを開いたときに最初に気付くのは、奇妙な<UXXXX>
と同じくらい英語の単語を読むことです。 コード。これらのコードを作成できる必要があります-これはencodestr
の場所です スクリプトが来ます。
変更する必要のあるセクションがわかっている場合は、そのセクションに含まれている各フィールドを知っている必要があります。
たとえば、
LC_TIME
セクションには、フィールドt_fmt
が含まれています 、および他の多く。各フィールドには、ガイドに独自の説明があります。
変更するフィールドがわかったので、ガイドをもう一度使用して、フィールドが受け入れる値を確認します。
たとえば、フィールド
t_fmt
テキストと一般的なstrfmt変数を受け入れます。
変更するフィールドに何を書き込むかがわかったら、encodestr
にテキストを実行します。 エンコードされた同等のものを取得するためのスクリプト。
注: すべてのフィールドをエンコードする必要はありません。必要に応じて、既存のロケールを参照として使用してください。
たとえば、時間形式を
Time: %T
にしたい場合t_fmt
で フィールドで、./encodestr "Time: %T"
を実行します;これにより、<U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>
が返されます。 したがって、t_fmt <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>
という行があります。 お住まいの地域で(もちろん、それぞれのセクションで)
必要なすべてのフィールドを変更したら、システムにロケールをインストールして使用できるようにする必要があります。このためのインストールセクションに進みます。
ロケールを最初から作成する
一方を変更するのとは対照的に、カスタムロケールを作成するために使用できるもう一方の方法は、最初からそれを処理します。ガイドを使用する場合、これはそれほど難しいことではありません。ただし、ここに役立つヒントがあります。実際のコピーアンドペーストなしで、他のロケールからセクションをコピーできます。 メソッド。次の形式に従う必要があります:
LC_SECTION
copy "locale"
END LC_SECTION
LC_SECTION
の場所 変更するセクションであり、locale
そのセクションをコピーするロケールです。
たとえば、英語のロケールで時刻形式をコピーする場合は、次のテキストをカスタムロケールファイルにします。
LC_TIME
copy "en_GB"
END LC_TIME
これにより、多くの作業が節約され、参照されるロケールに加えられた変更がすべて自分のロケールに反映されることが保証されます。
カスタムロケールのインストール
以下に示す手順は最適ではないかもしれませんが、機能します。
-
ロケールをコンパイルします。パニックにならない!これには時間がかかりません。コマンド
sudo localedef -i custom -f UTF-8 custom.UTF-8 -c -v
を実行するだけです。 ここで、custom
ロケールの名前です。 -
ロケールを
/usr/share/i18n/locales/
にコピーします ディレクトリ。間違いなくsudoが必要です これを行う特権があり、コマンドsudo cp locale /usr/share/i18n/locales/
を使用して実行できます。 ここで、locale
カスタムロケールのファイル名です。 -
/var/lib/locales/supported.d/
でロケールを指定します 。たとえば、ファイル名/var/lib/locales/supported.d/asd
を作成しますcustom UTF-8
という行を追加します 、ここで、customはロケールの名前です。 -
マジックコマンドを実行します。このコマンドが正確に何をするのかは実際にはわかりませんが、非常に重要です。
sudo locale-gen
を実行します 。必要に応じて、利用可能なロケールへの参照を生成する可能性が最も高いです。 -
ロケールを使用するようにシステムに指示します。ロケールをシステム全体で使用する場合は、
/etc/environment
を変更します。 ファイル。そうでない場合は、~/.profile
を変更できます ファイル、または起動時に供給されるその他のファイル。後者の意味がわからなくても心配しないでください。~/.profile
を使用してください。 ファイル。何を書き込む必要があるかを知るには、最初にlocale
を実行します。 指図。LANGUAGE
などの項目を含むリストを発行する必要があります 、LC_MESSAGES
、LC_CTYPE
と他の多く。必要なセクション(前のコマンドでリストされている)ごとに、このSECTION="locale"
を別々の行に記述します。 ここで、SECTION
セクションであり、locale
カスタムロケールの名前。
たとえば、オランダの時間形式を使用したいが英語を使用したい場合は、次のように記述します。
LANGUAGE="en_GB:en"
LC_TIME="nl_NL"
注: ロケール設定ごとに1つのロケールを使用する場合は、LC_ALL="locale"
と記述します。 ここで、locale
カスタムロケールの名前です。言語以外のすべてにロケールを使用する場合は、LANG="locale"
と記述できます。 および(もちろん別の行で)LANGUAGE="locale":XX
ここで、XX
は、必要な言語の2文字のコードです。
たとえば、オランダ語のロケールと英語を使用する場合は、次を使用できます。
LANG="nl_NL"
LANGUAGE="nl_NL:en"
終了しました
次回ログインするときは、ロケールが使用されているはずです。 locale
を実行してこれをテストできます もう一度コマンドします。
このガイドの矛盾や虚偽の記述についてコメントしてください!