Đặt vị trí tùy chỉnh trong Gnome3 (trên Fedora 20)


15

Tôi đã tạo các tùy chỉnh của riêng mình localevà đặt chúng vào /etc/locale.confđó có hiệu lực thành công nếu tôi đăng nhập trên bảng điều khiển ảo (Ctrl + Alt + F2). Trong phiên Gnome3 của tôi, các biến đó không được đặt. Đối với các ứng dụng đầu cuối, tôi chỉ có thể đặt chúng vào .bashrcnhưng điều đó sẽ không giúp tôi với các ứng dụng đồ họa như Thunderbird và Pidgin.

Tôi đã cố gắng làm theo các gợi ý sau: Cài đặt ngôn ngữ trong khởi tạo shell không được sử dụng bởi phiên Gnome và thậm chí đã mô phỏng lỗi trong Locale - ArchWiki bằng cách tạo .pam_environmenttệp, nhưng locales vẫn là cài đặt của Gnome3. Có một cuộc đối thoại cấu hình trong cài đặt Gnome nhưng nó chỉ cho phép đặt một tập hợp rất hạn chế các localekết hợp được xác định trước và không có cách nào để tùy chỉnh chúng.

Các tập tin liên quan trong thư mục nhà của tôi:

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

Nội dung của /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"

Có ai biết cách đặt locales tùy chỉnh trong Gnome3 không?

Câu trả lời:


9

Thông tin lai lịch

Tôi đã thử nghiệm giải pháp trên Fedora 21 với Gnome Shell 3.14.4, nhưng tôi tin rằng nó cũng có thể được áp dụng cho các phiên bản khác.

Điều đầu tiên cần hiểu là môi trường máy tính để bàn Gnome ghi đè các định nghĩa miền địa phương trên toàn hệ thống và do đó không bị ảnh hưởng /etc/locale.conf. Ngoài ra, có thể có những ứng dụng có cấu hình ngôn ngữ riêng và hoàn toàn không sử dụng cài đặt hệ thống hoặc Gnome. Trong hướng dẫn này, tôi sẽ mô tả một cách để tùy chỉnh cài đặt ngôn ngữ theo nhu cầu của bạn và Gnome và hệ thống sẽ nhất quán theo quan điểm bản địa.


Kiểm tra tình trạng địa phương hiện tại

Cài đặt toàn hệ thống

Từ Hướng dẫn của Quản trị viên Hệ thống Fedora 21 :

Cài đặt ngôn ngữ toàn hệ thống được lưu trữ trong /etc/locale.conftệp, được đọc khi khởi động sớm bởi trình nền systemd . Các cài đặt ngôn ngữ được định cấu hình /etc/locale.confđược kế thừa bởi mọi dịch vụ hoặc người dùng, trừ khi các chương trình riêng lẻ hoặc người dùng riêng lẻ ghi đè lên chúng.

Để xem trạng thái ngôn ngữ hiện tại, chúng ta có thể chạy:

$ 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

Cài đặt Gnome

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

Gnome chỉ có một cài đặt. Bằng cách xem nhanh mã nguồn của trung tâm điều khiển gnome, có vẻ như khi set_localed_locale()hàm được gọi, nó sẽ đặt tất cả các danh mục sau (LC_TIME, LC_NUMERIC, LC_MONETARY, LC_MEASUREMENT, LC_PAPER) vào cùng một địa điểm được xác định trong org.gnome.system.locale region.

Việc trộn các cài đặt ngôn ngữ khác nhau dường như là không thể nếu không tạo một miền địa phương tùy chỉnh, nhưng may mắn thay, đó không phải là một nhiệm vụ quá phức tạp.


Tạo miền tùy chỉnh

Tôi nghĩ rằng cách dễ nhất để giải thích là ví dụ. Trong trường hợp cụ thể của tôi, tôi muốn có một ngôn ngữ tùy chỉnh, chủ yếu dựa trên tiếng Do Thái ( he_IL ) nhưng với LC_NAME, LC_MESSAGES từ en_US và LC_TIME (đã sửa đổi first_weekdayfirst_workday) từ en_GB .

Lấy tập tin định nghĩa miền địa phương

Bạn nên có một ý tưởng mà địa phương bạn muốn trộn. Đầu tiên chúng ta cần xác định vị trí các tệp định nghĩa liên quan, có thể tìm thấy trong /usr/share/i18n/locales/. Quay lại ví dụ của tôi, tôi cần những điều sau đây: he_IL , en_USen_GB . Tôi thiết lập một thư mục làm việc trong nhà của tôi và sao chép các tập tin cần thiết vào đó:

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

Tạo một tệp định nghĩa mới

Tôi quyết định gọi địa phương của mình là hc_IL và lấy he_IL làm cơ sở. Các dòng sau đây tạo một tệp mới hc_ILvới nội dung từ he_ILvà trên đường thay thế tất cả các lần xuất hiện của một chuỗi he_IL bên trong tệp bằng hc_IL .

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

Sửa đổi tệp định nghĩa mới

Bây giờ chúng tôi có thể tùy chỉnh miền địa phương mới theo nhu cầu của chúng tôi. Mở tệp vừa tạo ~/custom-locale/hc_ILbằng trình soạn thảo văn bản yêu thích của bạn. Tôi sử dụng vim (nó có tô sáng cú pháp thích hợp cho các tệp định nghĩa miền địa phương):

$ vim ~/custom-locale/hc_IL

Đối với những người chưa chọn trình soạn thảo yêu thích của họ và vim không phải là tách trà của họ, có thể sử dụng gedit :)

$ gedit ~/custom-locale/hc_IL

Cấu trúc tập tin không phức tạp lắm. Về cơ bản, nó được xây dựng từ các phần. Từ trang địa phương (5) trang man:

Định nghĩa miền địa phương có một phần cho mỗi loại miền địa phương. Mỗi phần có thể được sao chép từ một miền khác hiện có hoặc có thể được xác định từ đầu. Nếu danh mục cần được sao chép, từ khóa hợp lệ duy nhất trong định nghĩa sẽ được sao chép theo sau là tên của miền địa phương sẽ được sao chép.

Khái niệm về bản sao là rất hữu ích. Nó tiết kiệm thời gian và các tập tin kết quả là rõ ràng và súc tích. Ví dụ: thay vì sao chép toàn bộ các phần xung quanh, bạn có thể có:

LC_MESSAGES
copy "en_US"
END LC_MESSAGES

Tài liệu đầy đủ về tệp định nghĩa miền địa phương có thể được truy cập thông qua:

$ man 5 locale

Mặc dù, nếu bạn chỉ muốn tạo một miền địa phương tùy chỉnh, là sự pha trộn của các ngôn ngữ hiện có thì không cần phải hiểu từng chi tiết.

Trong trường hợp của tôi, tôi đã sửa đổi các danh mục và từ khóa sau:

  • LC_IDENTATIONATION

    title      "Custom Hebrew locale"
    source     "mydomain.ws"
    address    "http:////www.mydomain.ws"
    contact    ""
    email      "admin@mydomain.ws"
    tel        ""
    fax        ""
    language   "Hebrew"
    territory  "Israel"
    revision   "1.0"
    date       "2015-04-21"
    

    Lưu ý: Tất cả các dòng " thể loại .. " trong phần LC_IDENTIFICATION đã được sửa đổi trong quá trình tạo tệp bằng cách sử dụng sed. Vì vậy, chúng ta không cần phải chạm vào chúng nữa.

  • LC_TIME

    Tôi đã sao chép phần hoàn chỉnh từ en_GB và chỉ sửa đổi các dòng chỉ ra ngày đầu tuần và ngày làm việc đầu tiên:

    first_weekday 1
    first_workday 1
    
  • Phần còn lại của các danh mục tôi để lại hoặc thay thế nội dung của chúng bằng chỉ thị sao chép như trong:

    LC_NAME
    copy "en_US"
    END LC_NAME
    

Thế là xong, tập tin định nghĩa đã sẵn sàng. Đừng quên lưu tập tin :)

Biên dịch và sao chép ngôn ngữ mới

Quá trình biên dịch miền địa phương mới được thực hiện bằng lệnh sau dưới dạng root hoặc sử dụng sudo . Thay thế hc_ILbằng ngôn ngữ của bạn:

$ sudo localedef  -c -v -i hc_IL -f UTF-8 hc_IL.UTF-8

Nếu quá trình biên dịch thành công, dữ liệu miền địa phương đã biên dịch sẽ được thêm vào tệp lưu trữ /usr/lib/locale/locale-archive.

Sao chép tệp định nghĩa miền địa phương mới vào thư mục định nghĩa miền địa phương. Thay thế hc_ILbằng ngôn ngữ của bạn:

$ sudo cp -v hc_IL /usr/share/i18n/locales/

Kích hoạt Địa điểm mới

Trong bước này, chúng tôi muốn định cấu hình hệ thống và Gnome để sử dụng ngôn ngữ mới.

Cài đặt toàn hệ thống

Chỉnh sửa /etc/locale.conftệp dưới dạng root và đặt mọi dòng bắt đầu với LC_ngôn ngữ mới của bạn. Ví dụ:

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

Cài đặt Gnome

Để kích hoạt miền địa phương mới trong Gnome, hãy chạy lệnh sau. Thay thế hc_ILbằng ngôn ngữ của bạn:

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

Xác thực cài đặt mới

Bước cuối cùng là xác nhận rằng mọi thứ hoạt động như mong đợi. Để tải lại tất cả các cài đặt, dễ nhất đối với tôi là khởi động lại.

  • Tham khảo phần "Kiểm tra trạng thái địa phương hiện tại" để kiểm tra xem cấu hình hệ thống có đúng không.
  • Sử dụng Gnome Shell và các ứng dụng phụ thuộc miền địa phương (đồ họa và bảng điều khiển) và kiểm tra xem chúng có hoạt động như mong đợi với miền địa phương mới không. Ví dụ: nếu bạn tùy chỉnh LC_TIME, bạn có thể chạy datelệnh để xác thực định dạng ngày:

    $ date +%x
    21/04/15
    

Lưu ý: Mọi thứ đã được thử nghiệm trên Fedora 21 với Gnome 3.14. Các bản phân phối Linux khác có thể yêu cầu các bước bổ sung hoặc khác nhau.

Hãy bình luận nếu bạn tìm thấy bất kỳ vấn đề với các hướng dẫn.


Tôi có thể xác nhận điều này hoạt động trên Fedora 22 với Cinnamon. Nó rất có thể sẽ hoạt động với Gnome.
Dee'Kej

1
Tôi chắc chắn nếu họ cố gắng thực sự, họ có thể thiết lập các địa điểm tùy chỉnh chỉ khó hơn một chút.
5heikki

Tôi yêu Gnome nhưng điều này thật nực cười. Ít nhất là để một cách cho người dùng quyền lực thiết lập cài đặt ngôn ngữ của họ theo cách họ muốn. Tôi muốn một địa điểm ở Hoa Kỳ cho hầu hết mọi thứ, nhưng máy in của tôi sử dụng giấy A4 ...
static_rtti
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.