
我創建了自己的自訂locale
並將它們放置在/etc/locale.conf
其中,如果我登入虛擬控制台(Ctrl+Alt+F2),它們就會成功生效。不過,在我的 Gnome3 會話中,這些變數並未設定。對於終端應用程序,我可以將它們放在 中,.bashrc
但這對我使用 Thunderbird 和 Pidgin 等圖形應用程式沒有幫助。
我嘗試遵循這些提示:GNOME 會話未使用 shell 初始化中的區域設置甚至模擬了這個錯誤語言環境 - ArchWiki透過建立一個.pam_environment
文件,但locale
s仍然是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 和系統將保持一致。
檢查目前區域設定狀態
系統範圍設定
系統範圍的區域設定儲存在該
/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_weekday
和first_workday
)來自en_GB。
取得區域設定定義文件
您應該知道要混合哪些區域設定。首先我們需要找到相關的定義文件,可以在/usr/share/i18n/locales/
.回到我的例子,我需要以下:他_IL,zh_CN和en_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 發行版可能需要額外或不同的步驟。
如果您發現說明有任何問題,請發表評論。