背景資料

背景資料

我創建了自己的自訂locale並將它們放置在/etc/locale.conf其中,如果我登入虛擬控制台(Ctrl+Alt+F2),它們就會成功生效。不過,在我的 Gnome3 會話中,這些變數並未設定。對於終端應用程序,我可以將它們放在 中,.bashrc但這對我使用 Thunderbird 和 Pidgin 等圖形應用程式沒有幫助。

我嘗試遵循這些提示:GNOME 會話未使用 shell 初始化中的區域設置甚至模擬了這個錯誤語言環境 - ArchWiki透過建立一個.pam_environment文件,但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"

有誰知道如何locale在 Gnome3 中設定自訂?

答案1

背景資料

我在 Fedora 21 上使用 GNOME Shell 3.14.4 測試了該解決方案,但我相信它也可以應用於其他版本。

首先要了解的是,GNOME 桌面環境會覆蓋系統範圍的區域設定定義,因此不受/etc/locale.conf.此外,有些應用程式可能有自己的區域設定配置,並且完全不使用系統或 GNOME 設定。在本指南中,我將描述一種根據您的需求自訂區域設定的方法,從區域設定的角度來看,GNOME 和系統將保持一致。


檢查目前區域設定狀態

系統範圍設定

Fedora 21 系統管理員指南:

系統範圍的區域設定儲存在該/etc/locale.conf檔案中,該檔案在早期啟動時由系統守護進程。中配置的區域設定/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 只有一種設定。透過快速瀏覽gnome 控制中心的原始碼看起來,當set_localed_locale()呼叫函數時,它將以下所有類別(LC_TIME、LC_NUMERIC、LC_MONETARY、LC_MEASURMENT、LC_PAPER)設為org.gnome.system.locale region.

如果不創建自訂區域設置,混合不同的區域設置似乎是不可能的,但幸運的是,這不是一個非常複雜的任務。


建立自訂區域設置

我認為最簡單的解釋方法就是舉例。在我的具體情況下,我想要一個自訂區域設置,主要基於希伯來語(他_IL) 但 LC_NAME, LC_MESSAGES 來自zh_CN和 LC_TIME (修改後的first_weekdayfirst_workday)來自en_GB

取得區域設定定義文件

您應該知道要混合哪些區域設定。首先我們需要找到相關的定義文件,可以在/usr/share/i18n/locales/.回到我的例子,我需要以下:他_IL,zh_CNen_GB。我在家裡建立了一個工作資料夾並將所需的文件複製到其中:

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

建立新的定義文件

我決定打電話給我的語言環境hc_IL並採取了他_IL作為基礎。以下幾行會建立一個新文件hc_IL,其中的內容he_IL將替換所有出現的字串他_IL文件裡面有hc_IL

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

修改新定義檔

現在我們可以根據需要自訂新的區域設定。使用您喜歡的文字編輯器開啟新建立的文件~/custom-locale/hc_IL。我用維姆(它對語言環境定義檔具有正確的語法突出顯示):

$ vim ~/custom-locale/hc_IL

對於那些還沒有選擇自己喜歡的編輯器的人維姆不是他們喜歡的,可以使用編輯器:)

$ gedit ~/custom-locale/hc_IL

文件結構不是很複雜。本質上,它是由部分建構的。從語言環境(5)手冊頁:

區域設定定義對於每個區域設定類別都有一個部分。每個部分都可以從另一個現有語言環境複製,也可以從頭開始定義。如果要複製類別,則定義中唯一有效的關鍵字是複製後接應複製的區域設定的名稱。

的概念複製非常有用。它節省了時間,並且產生的文件清晰簡潔。例如,您可以不複製整個部分,而是:

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在使用 . 文件建立期間已修改部分sed。所以我們不需要再碰它們了。

  • LC_TIME

    我複製了完整的部分en_GB並僅修改指示一週第一天和第一個工作日的行:

    first_weekday 1
    first_workday 1
    
  • 其餘類別我保留原樣或將其內容替換為複製指令如下:

    LC_NAME
    copy "en_US"
    END LC_NAME
    

就這樣,定義檔就準備好了。不要忘記保存文件:)

編譯並複製新的語言環境

使用以下命令完成新語言環境的編譯或使用須藤。替換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並將以 開頭的每一行設定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
    

筆記:一切都在 Fedora 21 和 GNOME 3.14 上進行了測試。其他 Linux 發行版可能需要額外或不同的步驟。

如果您發現說明有任何問題,請發表評論。

相關內容