Gettext

gettext
Tác giả gốcSun Microsystems
Nhà phát triểnNhiều nhóm khác nhau
Phát hành lần đầu1990; 35 năm trước (1990)[1]
Phiên bản ổn định
0.21
Kho mã nguồnNhiều, khác nhau dựa trên OpenSolaris và GNU gettext
Hệ điều hànhĐa nền tảng
Thể loạiQuốc tế hóa và địa phương hóa
Giấy phépVarious free software licenses
Websitehttps://www.gnu.org/software/gettext/

Trong điện toán, gettext là một hệ thống quốc tế hóa và bản địa hóa (i18n) thường dùng cho việc viết các ứng dụng đa ngôn ngữ trên các hệ điều hành tương tự Unix. Việc triển khai gettext thường được sử dụng phổ biến nhất là GNU gettext,[cần dẫn nguồn] phát hành bởi GNU Project năm 1995.

Lịch sử

[sửa | sửa mã nguồn]

gettext ban đầu được viết bởi Sun Microsystems vào đầu những năm 1990. GNU Project phát hành GNU gettext, một phần mềm tự do triển khai hệ thống vào năm 1995.

Hoạt động

[sửa | sửa mã nguồn]

Lập trình

[sửa | sửa mã nguồn]
Quy trình xử lý gettext điển hình. Ví dụ de.po ở bên trái cho thấy không tìm thấy chuỗi dịch nào, do đó chuỗi gốc được truyền qua.

Mã nguồn được sửa đổi đầu tiên để sử dụng các lệnh gọi GNU gettext. Với phần lớn ngôn ngữ lập trình, việc này được thực hiện bằng cách bao các chuỗi người dùng sẽ thấy trong hàm gettext. Để tiết kiệm thời gian nhập và để giảm sự lộn xộn của mã, chức năng này thường được đặt bí danh thành _, ví dụ cho mã C:

printf(gettext("My name is %s.\n"), my_name);

có thể thành:

printf(_("My name is %s.\n"), my_name);

Ghi chú (bắt đầu bằng ///) được đặt trực tiếp trên các chuỗi do đó đánh dấu được tạo sẵn như gợi ý cho người dịch bởi các chương trình trợ giúp.

gettext sau đó sử dụng chuỗi được cung cấp làm khóa để tìm kiếm các bản dịch thay thế và sẽ trả về chuỗi gốc khi không có bản dịch. điều này trái ngược với POSIX catgets[2], AmigaOS GetString, hoặc dùng LoadString trong Microsoft Windows nơi mà một ID chương trình (thường là một số nguyên) được dùng.

xgettext được chạy trên các nguồn để tạo ra một file .pot (Portable Object Template), chứa một danh sách tất cả các chuỗi có thể dịch được trích xuất từ các nguồn.

Ví dụ: file đầu vào có ghi chú có thể trông giống như sau:

/// TRANSLATORS: Please leave %s as it is, because it is needed by the program.
/// Thank you for contributing to this project.
printf(_("My name is %s.\n"), my_name);

xgettext được chạy bằng lệnh:

xgettext -c /

File.pot trả về trông giống như thế này với ghi chú:

#. TRANSLATORS: Please leave %s as it is, because it is needed by the program.
#. Thank you for contributing to this project.
#: src/name.c:36
msgid "My name is %s.\n"
msgstr ""

Trình dịch chuyển đổi file .po (Portable Object) từ mẫu sử dụng chương trình msginit, sau đó điền vào các bản dịch.[3] msginit khởi tạo các bản dịch như vậy, ví dụ, đối với một bản dịch tiếng Pháp, lệnh để chạy sẽ là:[4]

msginit—locale=fr—input=name.pot

Điều này sẽ tạo file fr.po. Trình dịch sau đó sửa file kết quả, hoặc bằng tay hoặc với một công cụ dịch như Poedit, hoặc Emacs với chế độ chỉnh sửa cho các file .po. Một mụcđã chỉnh sửa sẽ giống như sau:

#: src/name.c:36
msgid "My name is %s.\n"
msgstr "Je m'appelle %s.\n"

Cuối cùng, file.po được biên dịch với msgfmt thành file nhị phân .mo (Machine Object). GNU gettext có phần mở rộng tên tệp riêng: .gmo.[5] Bây giờ chúng đã sẵn sàng để phân phối với gói phần mềm.

Hoạt động

[sửa | sửa mã nguồn]

Người dùng, trên các hệ thống kiểu Unix, đặt biến môi trườngLC_MESSAGES, và chương trình sẽ hiển thị chuỗi trong ngôn ngữ đã lựa chọn, nếu có một file .mo cho nó.

Người dùng, trên các biến thể GNU variants, đặt biến môi trường LANGUAGE (LC_MESSAGES cũng được hỗ trợ),[6] và chương trình sẽ hiển thị chuỗi trong ngôn ngữ đã lựa chọn, nếu có một file .mo cho nó.

Triển khai

[sửa | sửa mã nguồn]

Ngoài C, GNU gettext còn cho phép triển khai trên: C# cho ASP.NET,[7][8] Perl,[9] PHP,[10] Python,[11] Scala,[12]Node.js.[13]

  • gtranslator
  • Poedit
  • Translate Toolkit
  • Virtaal
  • Weblate

Chú thích

[sửa | sửa mã nguồn]
  1. ^ "History of gettext() et al? - comp.unix.solaris". Compgroups.net. Bản gốc lưu trữ ngày 23 tháng 3 năm 2012. Truy cập ngày 3 tháng 4 năm 2016.
  2. ^ "About catgets". gnu.org. Truy cập ngày 24 tháng 10 năm 2017.
  3. ^ "GNU gettext utilities: PO Files". Gnu.org. Truy cập ngày 3 tháng 4 năm 2016.
  4. ^ "How to Translate With GetText PO and POT Files". Icanlocalize.com. Truy cập ngày 3 tháng 4 năm 2016.
  5. ^ "Files Conveying Translations". Gnu.org. Truy cập ngày 22 tháng 4 năm 2014.
  6. ^ "GNU gettext utilities: Locale Environment Variables". Gnu.org. Truy cập ngày 3 tháng 4 năm 2016.
  7. ^ "Google Code Archive - Long-term storage for Google Code Project Hosting". Code.google.com. Truy cập ngày 3 tháng 4 năm 2016.
  8. ^ "turquoiseowl/i18n: Smart internationalization for ASP.NET". GitHub.com. Truy cập ngày 3 tháng 4 năm 2016.
  9. ^ "libintl-perl - An Internationalization Library for Perl That Aims To Be Compatible With the Uniforum Message Translations System as Implemented For Example in GNU Gettext". github.com. Truy cập ngày 14 tháng 9 năm 2017.
  10. ^ "Gettext". php.net. Truy cập ngày 24 tháng 10 năm 2017.
  11. ^ {{chú thích web|url=https://docs.python.org/library/gettext.html%7Ctitle=gettext[liên kết hỏng] — Multilingual internationalization services — Python 3.7.0 documentation|website=docs.python.org|access-date = ngày 21 tháng 9 năm 2018}
  12. ^ "makkarpov/scalingua: A simple gettext-like internationalization library for Scala". github.com. Truy cập ngày 28 tháng 4 năm 2016.
  13. ^ "DanielBaulig/node-gettext: An adaption of Joshua I. Miller's Javascript Gettext library for node.js". GitHub.com. Truy cập ngày 3 tháng 4 năm 2016.

Liên kết ngoài

[sửa | sửa mã nguồn]
Chúng tôi bán
Bài viết liên quan
“Killer of the Flower moon” - Bộ phim đẹp và lạnh lẽo vừa ra mắt.
“Killer of the Flower moon” - Bộ phim đẹp và lạnh lẽo vừa ra mắt.
Bộ phim được đạo diễn bởi Martin Scorsese và có sự tham gia của nam tài tử Leonardo Dicaprio
Nhân vật Kanroji Mitsuri (Luyến Trụ) - Kimetsu No Yaiba
Nhân vật Kanroji Mitsuri (Luyến Trụ) - Kimetsu No Yaiba
Kanroji Mitsuri「甘露寺 蜜璃 Kanroji Mitsuri」là Luyến Trụ của Sát Quỷ Đội.
Mavuika
Mavuika "bó" char Natlan
Nộ của Mavuika không sử dụng năng lượng thông thường mà sẽ được kích hoạt thông qua việc tích lũy điểm "Chiến ý"
KLAUS (2019) - Khi phim hoạt hình không chỉ dành cho trẻ em
KLAUS (2019) - Khi phim hoạt hình không chỉ dành cho trẻ em
Ngay từ đầu mục đích của Jesper chỉ là lợi dụng việc những đứa trẻ luôn thích đồ chơi, dụ dỗ chúng viết thư cho ông già Noel còn mình thì nhanh chóng đạt được mục tiêu bố đề ra và trở lại cuộc sống vô lo vô nghĩ ngày nào