Mặc dù gần như không biết gì về cách bản địa hóa được triển khai trong Linux, tôi đã cố gắng hết sức để tìm hiểu về nó.
Mô tả ngắn gọn
/ usr / lib / locale / locale-archive
locale-archive
là một tệp ánh xạ bộ nhớ được tạo bằng locale-gen(8)
cách gọi localedef(1)
. Ánh xạ bộ nhớ có nghĩa là một khi nó được tạo và gọi bởi một chương trình, nó chỉ được tải một lần vào bộ nhớ.
Vì tất cả các bộ ngôn ngữ được xác định trong /etc/locale.gen
được xác định trước và bản thân kho lưu trữ rất tĩnh, nên không cần thiết phải có nhiều lần trong bộ nhớ. Do đó, mỗi khi nó được gọi bởi một chương trình khác, quá trình sẽ được chỉ vào kho lưu trữ đã được tải trong bộ nhớ, do đó chỉ thêm vào bộ nhớ ảo của chương trình. Bằng cách này, không chỉ dấu chân bộ nhớ vật lý của quá trình được hạ xuống, mà còn mọi tòa nhà liên quan đến nội địa hóa đều được tăng tốc. (không cần thêm I / O đĩa!)
Ngoài ra, nó dường như hoạt động như một loại tệp cục bộ failback chứa tất cả các ngôn ngữ trên toàn hệ thống. Ngoài ra, kho lưu trữ được sử dụng rất nhiều bởi phần mềm được viết bằng glibc.
/usr/share/locale/$LOCALE_DIR/LC_MESSAGES/$PROGRAM.mo
Quốc tế hóa ( i18n, 18 chars between 'i' and 'n'
) phần mềm trong Linux có thể đạt được bằng cách sử dụng GNU-gettext.
- Khi một chương trình được viết, mọi câu lệnh in được điều chỉnh để sử dụng
gettext()
hàm GNU bao bọc chuỗi cần phải được in.
- Sau đó,
xgettext(1)
lặp lại qua nguồn, tạo .pot (Portable Object Template Files)
trên đường đi của nó.
- Người dịch sau đó có thể sử dụng
msginit(1)
để phân tích nó thành .po (Portable Object)
các tệp, thường đại diện cho một danh mục tin nhắn. Sau đó tất cả các chuỗi được dịch bằng tay.
- Sau đó,
msgfmt(1)
được sử dụng để biên dịch .po
tệp đã chỉnh sửa thành tệp nhị phân .mo (Message Object)
. Chúng có thể được vận chuyển cùng với gói phần mềm.
Khi cài đặt một gói trên một hệ thống, /usr/share/locale/<locale_dir>/LC_MESSAGES/
sẽ được điền vào $PROGRAM.mo
các tệp. Khi ví dụ như gọi wget, LANG
biến env của bạn sẽ trỏ wget
đến sử dụng cài đặt ngôn ngữ hiện tại của bạn, điều này dẫn đến việc wget
bao gồm các bản dịch được biên dịch sẵn qua con trỏ vào phần đọc .mo binary
.
Chi tiết và nguồn bổ sung
Đối với kho lưu trữ
cục bộ: Ánh
xạ bộ nhớ: Phương pháp danh sách gửi thư của CentOS
I18N Đóng gói: Tài liệu Fedora trên các phần tổng hợp lưu trữ miền địa phương khác nhau
Cũng xem xét các trang web cho locale(1), localedef(1)
và locale-gen(8)
.
Đối với .mo
tệp:
Quá trình tạo .mo
tệp: Wikipedia trên Gettext
GNU MO Định dạng tệp: giải thích và định dạng nhị phân
Cũng xem xét các trang web cho xgettext(1), msginit(1)
và msgfmt(1)
.
Ngoài ra hãy xem các biến ENV LC_MESSAGE
và LOCPATH
.
Tôi chắc chắn rằng điều này chỉ làm trầy xước bề mặt của chủ đề rộng lớn này. Tuy nhiên, tôi hy vọng điều này là đủ để bạn bắt đầu.