po-debconf — giới thiệu
Mục đích của "debconf" là
làm cho tiến trình cấu hình gói
là thân thiện với người dùng.
Để đạt được, quan
trọng là đảm bảo mỗi
người dùng sẽ thấy câu hỏi
bằng ngôn ngữ mẹ đẻ.
Người dịch yêu cầu một khuôn
khổ để dịch dễ dàng mà
không cần theo dõi tiến trình phát
triển gói phần mềm. "po-debconf"
đã được thiết kế
để chạy đúng với các
công cụ "gettext" tiêu chuẩn khi
dịch tập tin mẫu debconf.
Muốn thêm hỗ trợ debconf vào gói
thì bạn đã ghi một tập tin
mẫu chứa văn bản tiếng Anh (ngôn
ngữ gốc). Để thêm khả năng
hỗ trợ tiến trình quốc tế hoá
(i18n) vào gói, bạn cần phải:
- • Tạo debian/po/POTFILES.in
- Tập tin này chứa danh sách
các mẫu chủ. Bình thường
nó chứa chỉ một dòng riêng
lẻ:
[type: gettext/rfc822deb] templates
Đường dẫn tương đối
với thư mục cha.
- • Thêm một dấu gạch
dưới vào trước mọi
trường có thể dịch
được trong mỗi mẫu
- Bình thường có thể
dịch được các trường
kiểu "Description", "Choices" và
đôi khi "Default".
- • Chạy debconf-updatepo
- Tiến trình này sẽ tạo
tập tin debian/po/templates.pot mà
người dịch sẽ dịch sang ngôn
ngữ khác.
- • Thêm vào debian/control
một quan hệ phụ thuộc xây dựng
vào "po-debconf".
Để giúp đỡ người dịch
thì bạn nên bảo tồn một gói
phần mềm có các tập tin PO hiện
thời. (Không thì người dịch
hoài phí thì giờ vì dịch
chuỗi vô ích.) Để cứ cập
nhật các tập tin PO, hãy gọi câu
lệnh theo đây (không có đối
số):
$ debconf-updatepo
Để duy trì các tập tin PO hiện
thời, bạn nên chạy lệnh này
mỗi lần thay đổi chuỗi tiếng Anh
trong mẫu. Cũng nên chạy nó khi bạn
nhận bản dịch mới hay bản dịch
đã cập nhật, vì người
dịch có thể đã dịch tập tin
PO cũ.
Nếu bạn thay tên, thêm hay gỡ bỏ
bất kỳ tập tin mẫu, cũng nhớ
để chỉnh sửa tập tin
debian/po/POTFILES.in một cách tương
ứng. Không thì một số chuỗi
tiếng Anh bị thiếu trong tập tin PO; các
chuỗi tiếng Anh này sẽ được
hiển thị cho người dùng xem, thậm
chí nếu các tập tin PO đã
được dịch hoàn toàn.
Chương trình
debconf-updatepo là luỹ
đẳng: nó sửa đổi tập tin PO
chỉ nếu nội dung bị cập nhật.
Vì vậy phương pháp tốt nhất
cung cấp các tập tin PO hiện thời trong
gói mã nguồn là gọi câu lệnh
này từ đích "clean" của
tập tin
debian/rules.
Ghi chú rằng bạn cần phải chạy
debconf-updatepo thậm chí nếu bạn sử
dụng
dh_installdebconf. Hàm thứ hai này
gọi
po2debconf mà từng gọi
debconf-updatepo nếu phát hiện tập tin
bị lỗi thời, nhưng không còn
là trường hợp lại vì hai lý
do :
- 1.
-
po2debconf nhờ nhãn giờ
để phát hiện tập tin bị
lỗi thời, và có thể không
chạy đúng khi dùng "pbuilder"
hoặc nếu bản dịch cũ đã
được lưu vào đĩa sau khi
mẫu bị sửa đổi.
- 2.
-
dh_installdebconf được
gọi đã lâu sau khi tạo ra tập
tin ".diff.gz".
Bạn cần phải kiểm tra các bản
dịch được hợp nhất trong gói
đã xây dựng khi nó
được biên dịch. Bạn có
thể tự kiểm tra, hoặc tự động
kiểm tra bằng cách sử dụng văn
lệnh
dh_installdebconf (hãy đảm bảo
có một quan hệ phụ thuộc xây
dựng đặt phiên bản với
"debhelper (>= 4.1.16)").
Để tự kiểm tra, bạn cần phải
trộn các mẫu với các bản dịch
vào lúc biên dịch (và đặt
quan hệ phụ thuộc xây dựng với
"po-debconf") như thế:
$ po2debconf debian/templates > debian/tmp/DEBIAN/templates
BE CAREFUL: hai tập tin tên
templates không
phải trùng nhau. Tập tin thứ nhất
chứa chỉ văn bản gốc (thường
là tiếng Anh), và đánh dấu
một số trường cần dịch, còn
tập tin thứ hai chứa tất cả các
ngôn ngữ. Vì vậy bạn KHÔNG
thể giữ chỉ những mẫu đã
trộn: có giữ thì bạn không
thể xử lý mỗi bản dịch
được đệ trình.
Định dạng nguồn tập tin mẫu mới
là gần trùng với một của
những tập tin mẫu đã phát
hành, nhưng mỗi trường có thể
dịch được có dấu gạch
dưới nằm trước. Thí dụ :
Template: debconf/frontend
Type: select
_Choices: Dialog, Readline, Gnome, Editor, Noninteractive
Default: Dialog
_Description: Interface to use for configuring packages:
Packages that use debconf for configuration share a common look and
feel. You can select the type of user interface they use.
.
The dialog frontend is a full-screen, character based interface,
while the readline frontend uses a more traditional plain text
interface, and the gnome frontend is a modern X interface. The
editor frontend lets you configure things using your favorite text
editor. The noninteractive frontend never asks you any questions.
Kể từ "po-debconf" 0.6.0, trường
đã địa phương hoá có
thể chứa hai dấu gạch dưới đi
trước. Trong trường hợp này,
giá trị trường nên là một
danh sách các giá trị định
giới bằng dấu phẩy, mỗi chuỗi msgid
thì chứa một giá trị. Do đó,
nếu mẫu ví dụ trước chứa
__Choices: Dialog, Readline, Gnome, Editor, Noninteractive
thì tạo 5 chuỗi msgid khác nhau. Ghi chú
rằng dấu cách nằm sau dấu phẩy
không có nghĩa.
Có một danh sách sự chọn không bao
giờ biến đổi thì "_Choices"
là đúng. Tuy nhiên, chia tách danh
sách như vậy có thể giúp
tránh lỗi thường gặp trong bản
dịch (v.d. bỏ sót một sự chọn,
sử dụng dấu phẩy không tiêu
chuẩn). Vì lý do này, rất khuyên
bạn sử dụng "__Choices" để thay
thế.
Tiếc là nếu bạn chuyển đổi
từ "_Choices" sang "__Choices" thì
cũng làm cho mọi chuỗi dịch là
dịch mờ (fuzzy). Tuy nhiên, có một
phương pháp chuyển đổi như
thế mà không mất trạng thái
về chuỗi dịch (phương pháp
này yêu cầu "po-debconf" >= 1.0).
Muốn chuyển đổi mẫu ví dụ
trước sang "__Choices": trước
tiên cần sao chép tập tin
templates
vào một tập tin tạm thời.
$ cp debian/templates debian/foo
Sửa
debian/foo, giữ chỉ những
trường "Template", "Type" và
"_Choices" mà nằm trong thí dụ
này.
Template: debconf/frontend
Type: select
_Choices: Dialog, Readline, Gnome, Kde, Editor, Noninteractive
Chạy
debconf-gettextize với hai cờ
"--merge" và "--choices" để
xây dựng các tập tin PO như thể
là "__Choices" đã được
ghi, và trộn các tập tin PO này với
các tập tin đã tồn tại:
$ debconf-gettextize --merge --choices debian/foo
Cuối cùng bạn cần phải gỡ bỏ
foo và tự chỉnh sửa
debian/templates
để thay thế "_Choices" bằng
"__Choices" trước khi chạy
debconf-updatepo.
Các nhà duy trì "Dpkg" đã
quyết định rằng theo quy ước
mỗi dòng bắt đầu với dấu
thăng ("#") là chú thích trong
tập tin
debian/control: "po-debconf" cũng theo
quy ước này. Kể từ "po-debconf"
0.8.0, các chú thích như vậy
được ghi vào tập tin PO, và
có thể chứa thông tin hữu ích cho
người dịch. Hơn nữa, các
phiên bản "po-debconf" trước bỏ
qua mọi dòng không chứa dấu hai
chấm, vì vậy nếu chú thích
không chứa dấu hai chấm thì không
cần thêm quan hệ phụ thuộc xây
dựng lập phiên bản đối với
"po-debconf". Thí dụ :
Template: debconf/button-yes
Type: text
# Translators, this text will appear on a button, so KEEP IT SHORT
_Description: Yes
Chú thích đặc biệt đã
được giới thiệu trong
"po-debconf" 1.0 để quản lý chuỗi
chứa vài mục khác nhau (như trong
trường
Choices) hay vài đoạn
văn khác nhau (như
Description). Hai chỉ
thị này cho nhà phát triển
điều khiển hữu ích hơn thông
tin được hiển thị cho người
dịch. Chú thích này theo dạng "#flag:
directive"; các chỉ thị
được diễn tả bên dưới.
-
translate:spec,
translate!:spec
- Đánh dấu chỉ một
số mục là « có thể dịch
được »; spec là danh sách
con số định giới bằng dấu
phẩy, nó xác định những
chuỗi nào sẽ được in ra
tập tin PO. Cũng có thể xác
định phạm vi bằng dấu trừ (v.d.
"2-6"), và dấu sao ("*") có
nghĩa « mọi chuỗi ». Chẳng
hạn, đối với
Template: partman-basicfilesystems/fat_mountpoint
Type: select
#flag:translate:3,4
__Choices: /dos, /windows, Enter manually, Do not mount it
_Description: Mount point for this partition:
Hai mục "Enter manually" và "Do not mount
it" sẽ xuất hiện trong tập tin PO,
nhưngkhông phải hai mục "/dos"
và "/windows". Có dấu chấm than
nằm sau từ khoá translate thì
spec xác định những chuỗi
nào sẽ bị hủy ra tập tin PO: các
chuỗi khác được in ra. Thí
dụ trước tương tự với
Template: partman-basicfilesystems/fat_mountpoint
Type: select
#flag:translate!:1,2
__Choices: /dos, /windows, Enter manually, Do not mount it
_Description: Mount point for this partition:
Có thể áp dụng cùng từ khoá
cho trường Description để
đảm bảo một số chuỗi
riêng sẽ không được dịch.
Template: partman-crypto/options_missing
Type: error
#flag:translate!:3
_Description: Required encryption options missing
The encryption options for ${DEVICE} are incomplete. Please
return to the partition menu and select all required options.
.
${ITEMS}
Nhưng mà trường hợp này nguy
hiểm, vì ngữ cảnh có thể
bị hủy ra tập tin PO: hãy ghi chú
để cho người dịch thông tin
cần thiết.
-
comment:spec,
comment!:spec
- Ghi chú đúng bên
dưới chỉ thị này áp dụng
cho những chuỗi được ghi rõ
bởi spec, mà được xác
định bên trên. Mặc định
là ghi chú được ghi vào
đằng trước một trường
có thể dịch được thì
được in ra cùng với tất
cả các chuỗi thuộc về
trường đó. (Ghi chú : dùng
"po-debconf" < 1.0, ghi chú được
ghi chỉ với chuỗi thứ nhất.)
Template: arcboot-installer/prom-variables
Type: note
# Translators, the 4th string of this description has been dropped
# from PO files. It contains shell commands and should not be
# translated.
#flag:comment:3
# "Stop for Maintenance" should be left in English
#flag:translate!:4
_Description: Setting PROM variables for Arcboot
If this is the first Linux installation on this machine, or if the
hard drives have been repartitioned, some variables need to be set
in the PROM before the system is able to boot normally.
.
At the end of this installation stage, the system will reboot.
After this, enter the command monitor from the "Stop for
Maintenance" option, and enter the following commands:
.
setenv OSLoader arcboot
setenv OSLoadFilename Linux
.
You will only need to do this once. Afterwards, enter the "boot"
command or reboot the system to proceed to the next stage of the
installation.
Thí dụ bên trên có một ghi
chú mà không dùng chỉ thị
"#flag:comment", vào đó một
"#flag:comment:*" ngầm được
thêm. Ghi chú này xuất hiện với
mọi chuỗi, nhưng lời về Stop for
Maintenance được in ra chỉ
đằng trước chuỗi thích
hợp.
- partial
- Từ khoá này báo
po2debconf nên giữ lại các chuỗi
đã dịch, thậm chí nếu
chưa dịch mọi chuỗi. Hãy sử
dụng cẩn thận: từ khoá này
đã được giới thiệu
nhằm mục đích chính xác.
Dù người dịch có thể thấy
bản dịch cũ trên các trang Web trạng
thái (xem dưới), và gửi đắp
vá để bao gồm trong bản tải
lên về sau, người dịch (giống
như nhà phát triển) có ít
thời gian rảnh. Để tiết kiệm
thời gian cho cả hai nhà phát triển
và người dịch, và cải tiến
tiến trình liên lạc giữa cả hai,
Dự án Debian cung cấp một công cụ
chuyên dụng,
podebconf-report-po. Dùng công
cụ này, bạn có thể yêu cầu
người dịch trước cập nhật
bản dịch (v.d. 2 tuần đằng
trước ngày tải lên), cuối
cùng nhận nhiều bản dịch
được cập nhật hơn. Rất
khuyên nhà phát triển sử dụng
công cụ này.
debconf-loadtemplate không chấp nhận tập tin
mẫu có mã đánh dấu quốc
tế hoá. Tuy nhiên, nó có phải
chấp nhận một tập tin hoà trộn,
thì nếu bạn từng gỡ rối thiết
lập debconf như thế
rm /tmp/{config,templates}.dat{,-old}
debconf-loadtemplate debian/templates
DEBIAN_PRIORITY=low debconf -freadline debian/config configure 28.0
bây giờ bạn cần phải sử dụng
(v.d.):
po2debconf debian/templates > debian/tmp/DEBIAN/templates
rm /tmp/{config,templates}.dat{,-old}
debconf-loadtemplate debian/tmp/DEBIAN/templates
DEBIAN_PRIORITY=low debconf -freadline debian/config configure 28.0
- •
- "Debconf" 1.2.0 nhận ra
trường theo dạng
Name-lang.encoding, v.d.
"Description-de.ISO-8859-1" hay "Choices-vi.UTF-8".
Mặc định là po2debconf ghi các
tập tin mẫu theo định dạng mới
đó. "debconf" cũ sẽ bỏ qua
các trường này, chỉ hiển
thị văn bản gốc (thường
là tiếng Anh). Xem po2debconf(1) để
biết cách thay đổi bảng mã
và định dạng kết xuất.
- •
- Một chuỗi tiếng Anh đưa
ra có thể nhận bằng mỗi ngôn
ngữ chỉ một bản dịch duy nhất.
Không thể cung cấp được hai
bản dịch khác nhau phụ thuộc vào
ngữ cảnh. Để giải quyết
vấn đề này, bạn cần phải
đánh dấu đặc biệt các
lần gặp chuỗi khác nhau, để
tạo nhiều chuỗi riêng. (Dấu này
chỉ hiển thị cho người dịch:
nó bị gỡ bỏ ra chuỗi
trước khi người dùng xem.)
Dấu như vậy phải được
phụ thêm vào chuỗi cần dịch:
nó phải bắt đầu với "[
" (dấu ngoặc mở có dấu cách
theo sau) và kết thúc với "]"
(dấu ngoặc đóng), và có
thể chứa bất cứ ký tự nào
trừ dấu ngoặc hay ký tự dòng
mới. Chẳng hạn, "[ bi_bô]" là
dấu hợp lệ, còn "[ bi[bô]bi]"
không phải. Các dấu này bị
gỡ bỏ bằng biểu thức chính quy
này:
$msg =~ s/\[\s[^\[\]]*\]$//s;
- •
- Khoảng cách không phải
được xử lý một cách
trùng bởi "po-debconf" và
"debconf-utils"; hàm thứ hai định
dạng lại các đoạn văn khi
cập nhật và trộn các bản
dịch, vì vậy "debconf-utils" rất
khéo, dấu cách không phải
được xử lý là một
phần của chuỗi khi quyết định
chuỗi nào được dịch mờ
(fuzzy: chuỗi có bản dịch cần
chỉnh sửa vì chuỗi gốc bị thay
đổi).
Mặt khác, "po-debconf" nhờ
"gettext" phát hiện chuỗi dịch
mờ, và nó không xử lý dấu
cách như ký tự đặc biệt.
Vì vậy, các dấu cách thừa
phải bị gỡ bỏ ra kết thúc
dòng trong mỗi mẫu chủ, để
tránh xuất hiện trong các tập tin PO va
POT.
Vì lý do tương tự,
debconf-gettextize có khả năng
đánh dấu chuỗi là « dịch
mờ » do các ký tự khoảng
cách khác nhau, thì người dịch
cần phải tự chỉnh sửa mỗi
chuỗi như vậy. Trường hợp
này chỉ xảy ra một lần khi
chuyển đổi mẫu sang định
dạng "po-debconf", trừ bạn thay
đổi khoảng cách một cách
ngẫu nhiên trong tập tin chủ, mà
làm phiền các người dịch.
- •
- Bình thường không nên
dịch trường Default: khi mẫu có
kiểu Select hay Multiselect. Trong rất
ít trường hợp (v.d. khi chọn
ngôn ngữ mặc định cho ứng
dụng), giá trị đã địa
phương hoá cũng có ích.
Không nên dịch giá trị đã
địa phương hoá: nên chọn
nó trong những giá trị tiếng Anh
được liệt kê trong trường
Choices. Phương pháp tốt nhất
để làm như thế là ghi chú
vào tập tin mẫu : chú thích này
sẽ cũng được sao chép vào
các tập tin PO.
Template: geneweb/lang
Type: select
__Choices: Danish (da), Dutch (nl), English (en), Esperanto (eo)
# You must NOT translate this string, but you can change its value.
# The comment between brackets is used to distinguish this msgid
# from the one in the Choices list; you do not have to worry about
# them, and have to simply choose a msgstr among the English values
# listed in the Choices field above, e.g. msgstr "Dutch (nl)"
_Default: English (en)[ default language]
_Description: Geneweb default language
Giá trị mặc định cũng xuất
hiện trong trường Choices, và
mỗi giá trị có bản dịch
riêng: giá trị thứ nhất là
giá trị chưa được dịch
mà được chọn trong các
giá trị Choices, còn giá trị
thứ hai là bản dịch chuẩn. Vì
"gettext" không thể chứa hai bản
dịch khác nhau cho cùng một msgid,
mỗi msgids phải được khác
biệt bằng chú thích nằm trong
dấu ngoặc, như diễn tả trong
phần con trên.
Trước "po-debconf" 0.8.0, không có
khả năng ghi chú như vậy nên
nhà duy trì phải thay thế trường
_Default: bằng _DefaultChoice: để
phân biệt trường riêng trong tập
tin PO:
#. DefaultChoice
msgid ""
"English[ default: do not translate bracketed material, put your "
"own language here but UNTRANSLATED. If it is not in the list, "
"put English (without bracketed material)]"
msgstr ""
"Swedish"
Chú thích chuẩn trong tập tin mẫu
ít bị lỗi hơn thì khuyến
khích.
Thống kê về bản dịch "po-debconf"
sẵn sàng ở
<
http://www.debian.org/intl/l10n/po-debconf/> (hoặc từ
máy nhân bản); tất cả
được tự động cập nhật
khi gói mới được tải lên.
Chỉ gói có sẵn tập tin
debian/po/templates.pot và
debian/po/POTFILES.in
được xử lý, vì vậy bạn
nên kiểm tra gói mã nguồn chứa
các tập tin này.
Người dịch có thể lấy tập tin
PO và POT từ trang trạng thái, nhưng
cũng nên liên lạc với người
dịch trước (địa chỉ thư
điện tử nằm trong phần đầu
của tập tin PO) và/hay nhóm dịch trong
hộp thư chung debian-l10n-
<language>@lists.debian.org (nếu có : một
số nhóm dịch dùng hộp thư chung
bên ngoài) để kiểm tra không
có người dịch khác đảm
nhận cùng bản dịch, và đọc
các báo cáo lỗi hiện thời về
gói đó để kiểm tra bản
dịch đã được đệ
trình chưa.
Sau khi dịch tập tin thì người dịch
nên đệ trình bản dịch cho nhà
duy trì bằng cách gửi một báo
cáo lỗi có mức quan trọng
wishlist
và thẻ
patch.
debconf-gettextize(1),
debconf-updatepo(1),
dh_installdebconf(1),
podebconf-report-po(1),
po2debconf(1),
debconf-devel(7).
Martin Quinson <[email protected]>
Denis Barbier <[email protected]>