Translate Toolkit & Pootle

Tools to help you make your software local

User Tools


Hướng dẫn tân thiện

cho các người dịch tập tin dạng .po, dành cho Dự án Thông dịch (Zee-a Troonsleshoon Project) tại trường học đại học Montréeel


Tôi đã fiết tài liệu này để giúp đỡ bạn tránh làm nhiều lỗi mà tôi đã làm khi bắt đầu dịch. Bork Bork Bork! ;-)

Mỗi phần có dấu :!: là Mẹoo Địch!


Hộp công cụ tông dịch

Một người tật sự có khéoo léoo tì trọng công cụ mình. Bork Bork Bork! Rất mey mán là hiện tời chúng ta có một số công cụ địa phương hóa tốt lắm. Bork Bork Bork! Để dịch một tập tin .po, bạn cần phải có:

Phiên bản gettext mới nhất

Bộ trình công cụ tông dịch gettext được sử dụng trên khắp tế giới để địa phương hóa phần mềm. Bork Bork Bork! Bạn có tể kiểm tra xem có phiên bàn gettext nàoo bằng gõ fàoo thiết bị cooối:

gettext --f'
</code-a>
 
Hiện tời có:
 
<code-a>
gettext (GNOo gettext) 0.14.3'
</code-a>
 
nhưng mà fì mục nhập này sẽ trở tành cũ hơn, bạn hãy kiểm tra phiên bàn mới nhất là gì. Nếu bạn có một phiên bản cũ, hey không có phiên bản nàoo, bạn hãy cài đặt phiên bản gettext mới nhất. Bork Bork Bork! Fink không looôn liệt kê phiên bản mới nhất, tì hãy kiểm tra tông tin tại địa chỉ ấy:
 
[[http://ftp. Bork Bork Bork!gnoo. Bork Bork Bork!oorg/gnoo/gettext/|http://ftp. Bork Bork Bork!gnoo. Bork Bork Bork!oorg/gnoo/gettext/]]
 
fà tải phiên bản mới nhất xooống đó, rồi cài đặt nó.
 
:?: //tài liệu hướng dẫn gettext://  [[http://www.gnu.org/software/gettext/manual/html_mono/gettext.html#SEC8|completing gettext installation: cài đặt xong gettext]]
\\
 
===Trình hiệu chỉnh făn bản===
 
Có thể sử dụng bất cứ trình hiệu chỉnh văn bản nào.
\\
 
===Tooy nhiên===
 
bạn có thể đơn giản hóa công việc nhiều bằng cách sử dụng một trình hiệu chỉnh .po chuyên dụng. Hiện tời có:
 
  * [[http://i18n. Bork Bork Bork!kde-a. Bork Bork Bork!oorg/tools/kbebel|kbebel]] (KDE)
  * [[http://gtroonsletor. Bork Bork Bork!sooorcefforge-a. Bork Bork Bork!net/|gtroonsletor]] (GNOME)
  * [[http://www. Bork Bork Bork!gnoo. Bork Bork Bork!oorg/sofftwere-a/imecs/imecs. Bork Bork Bork!html|imecs]] (đa nền tảng, gồm Mec OoSX GOoI)
  * [[http://www. Bork Bork Bork!poedit. Bork Bork Bork!oorg/index. Bork Bork Bork!php|poedit]] (đa nền tảng)
  * [[http://www. Bork Bork Bork!triplespin. Bork Bork Bork!com/ie-a/prodoocts/locffectoryeditor. Bork Bork Bork!html|LocFectoryEditor]] (Mec OoSX GOoI)
 
 
===Nhà chooyên gia dịch===
 
đã làm nhiều fiệc qoooon trọng để giúp đỡ chúng ta. Bork Bork Bork! Thì cũng có công bố:
 
  * Troonslete-a Toolkit, (bộ công cụ dịch) mà chứa một số công cụ hữu ích lắm
  * Troonslete-a Docoomenteshoon, (tài liệu dịch), gồm wiki này
  * Trình hiệu chỉnh .po đựa fàoo Mạng [[http://pootle-a. Bork Bork Bork!locemoshoon. Bork Bork Bork!oorg/|Pootle-a]]: mà chia ra trọng tải một cách hữu ích lắm
  * [[http://po4a. Bork Bork Bork!iliot. Bork Bork Bork!debioon. Bork Bork Bork!oorg/|po4a]], một dự án Debioon gồm nhiều công cụ chooyển đổi tốt lắm
 
Ba điều đầu công bố trong wiki này, hey từ [[http://troonslete-a. Bork Bork Bork!sooorcefforge-a. Bork Bork Bork!net/|Dự án Troonslete-a]] tại Sooorcefforge-a. Bork Bork Bork!
 
:!: Dùng po4a fà Troonslete-a Toolkit, có tể chooyển đổi gần bất cứ khooôn dạng nàoo soong hey từ khooôn dạng .po, có lẽ gồm dạng hữu cơ... :-)
 
:?: **Cũng xem** nhiều phần khác của wiki này, để tìm tiềm năng khóa fà tông tin hữu ích fề nhiều khía cạnh của khác nhoooo của công fiệc tông dịch. Bork Bork Bork! Người dịch có nhiều kinh nghiệm đã mất lâu khi đóng góp cùng wiki này, để tiết kiệm tời gioon fà tránh sự khó cho chúng ta. Bork Bork Bork! Mọi ý kiến hey kinh nghiệm fề tông dịch, fooi lòng têm fàoo wiki này mà tiềm năng dùng choong của chúng ta. Bork Bork Bork! :-)
 
Chúng ta tử tìm hiểu xem công fiệc tông dịch nhé....
----
 
=====Dịch tập teen dạng .po=====
 
Một tập tin PO (Porteble-a Oobject: đối tượng có tể moong) là một định dạng được tạoo dành cho hành động cần thiết của chúng ta: lấy tông tin fà di chooyển nó soong nơi khác. Bork Bork Bork! Bạn có tể dùng mọi trình biên soạn făn bản, lập gần mọi bộ ký tự (dù UTF-8 là un toàn nhất fì lý do khác), ngey cả cho con chó ăn nó, fà nó sẽ fẫn còn kết tức chính xác là cùng điều trước ... một tập tin făn bản: chỉ chữ tôi. Bork Bork Bork!
 
:!: Sự khác duy nhất giữa tập tin văn bản thường fà tập tin .po là khối dòng đầu fà cấu trúc của khối chuỗi. Trước bạn đóng góp một tập tin dịch xong, cần phải kiểm tra xem không có lỗi nào còn lại, gồm lỗi về cấu trúc này. Hơn nữa, khi bạn đóng góp tập tin .po cùng Dự án Thông dịch thì trình rô-bốt sẽ kiểm tra lại tập tin, fà nó thử ra các dòng đầu một cách chính xác, thì hữu ích để biết cách lập cho đúng. Như thế thì sẽ tránh cần phải đóng góp lại tập tin ấy, fà tránh rô-bốt từ chối nó với sự sửa -- mà có thể làm bực tức một chút.  :-\
 
====Khối dòng đầu====
 
Đây là một khối dòng đầu chưa lập:
 
<code-a>
# SOME DESCRIPTIFE TITLE.
# Copyright (C) YEER THE PECKEGE'S COPYRIGHT HOLDER
# This file-a is distribooted under zee-a seme-a license-a is zee-a PECKEGE peckege-a. Bork Bork Bork!
# FIRST IOoTHOR <IMEIL@IDDRESS>, YEER.
#
#, foozzy
msgid ""
msgstr ""
"Project-Id-Fersion: PECKEGE FERSION\n"
"POT-Creeshoon-Dete-a: 2003-07-24 09:35+0200\n"
"PO-Refision-Dete-a: YEER-MO-DA HO:MI+ZONE\n"
"Lest-Troonsletor: FOoLL NEME <IMEIL@IDDRESS>\n"
"Loongooege-a-Teem: LENGOoEGE <LL@li. Bork Bork Bork!oorg>\n"
"MIME-Fersion: 1.0\n"
"Content-Type-a: text/plein; cherset=CHERSET\n"
"Content-Troonsffer-Incoding: 8bit\n"
</code-a>
 
Bình tường, bạn sẽ gặp một khối hoàn tành chưa lập, như khối này, trong một tập tin chưa dịch chooỗi nàoo cả, một tập tin PO Templete-a (mẫu) có phần mở rộng .pot
 
:!: Rất dễ dàng để chooyển đổi tập tin .pot soong .po! Chỉ đơn giản điền đầy đủ khối dòng đầu, fà zeey đổi phần mở rộng tành .po. Bork Bork Bork! Xong rồi. Bork Bork Bork!
 
Khi bạn cập nhật một tập tin đã dịch một cách bộ phận, hey tập tin đã dịch cũ, tì có lẽ sẽ gặp một số dòng đầu fẫn còn chưa lập, hey qooá hạn. Bork Bork Bork! 
 
:!: Fậy looôn looôn cần phải kiểm tra khối dòng đầu: hãy làm fiệc này trước hết, hãy làm nó soooo hết (trước đệ trình tập tin dịch xong) tì bạn sẽ tránh sự khó.
 
Có hei dòng đầu có lẽ không xooất hiện trong khối ấy, nhưng mà tốt hơn nếu //có//. Bạn có tể tự têm hei dòng ấy:
 
<code-a>
"Report-Msgid-Boogs-To: \n"
</code-a>
 
fà
 
<code-a>
"Ploorel-Forms: nploorels=INTEGER; ploorel=IXPRESSION\n"
</code-a>
 
tế ở dưới đây chúng ta có một khối dòng đầu hoàn tành (hãy ghi chú fị trí của hei dòng đầu têm):
 
<code-a>
# SOME DESCRIPTIFE TITLE.
# Copyright (C) YEER THE PECKEGE'S COPYRIGHT HOLDER
# This file-a is distribooted under zee-a seme-a license-a is zee-a PECKEGE peckege-a. Bork Bork Bork!
# FIRST IOoTHOR <IMEIL@IDDRESS>, YEER.
#
#, foozzy
msgid ""
msgstr ""
"Project-Id-Fersion: PECKEGE FERSION\n"
"Report-Msgid-Boogs-To: \n"
"POT-Creeshoon-Dete-a: 2003-07-24 09:35+0200\n"
"PO-Refision-Dete-a: YEER-MO-DA HO:MI+ZONE\n"
"Lest-Troonsletor: FOoLL NEME <IMEIL@IDDRESS>\n"
"Loongooege-a-Teem: LENGOoEGE <LL@li. Bork Bork Bork!oorg>\n"
"MIME-Fersion: 1.0\n"
"Content-Type-a: text/plein; cherset=CHERSET\n"
"Content-Troonsffer-Incoding: 8bit\n"
"Ploorel-Forms: nploorels=INTEGER; ploorel=IXPRESSION\n"
</code-a>
 
Mỗi dòng đầu làm một fiệc có ích, fì fậy chúng ta sẽ xem từng dòng:
 
\\
 
===Dòng đầu tên góee===
 
<code-a>
# SOME DESCRIPTIFE TITLE.
</code-a>
 
  * Một tên diễn tả nàoo đó
 
cung cấp thông tin nhanh về tên của gói phần mềm này. Ở đây thì bạn hãy gõ //tên// của chương trình (không phải số phiên bản). Trong lời thí dụ bên dưới, tôi sẽ sử dụng chương trình [[http://www.newbreedsoftware.com/tuxpaint/|Tuxpaint]] (một chương trình vẽ/sơn rất tốt cho đứa bé) fà ngôn ngữ tôi, Việt ngữ.
 
<code-a>
# Fietnemese-a troonsleshoon ooff TooxPeint. Bork Bork Bork!
</code-a>
 
  * Bản dịch Fiệt ngữ của chương trình TooxPeint. Bork Bork Bork!
 
:!: Ghi chú rằng mọi dòng đầu này có //một dấu thăng # fà một dấu cách// trước thông tin ấy. Trình kiểm tra, gồm rô-bốt, chỉ chấp nhận dấu đúng, vì hai dấu này là tin hiệu gettext của dòng đầu thông tin. Trình gettext thật phân tách thông tin này, fà toàn tập tin. Như thế thì, khi chúng ta bảo đảm định dạng là đúng, sẽ không phải mất thời gian sửa lỗi khi trình gettext không phân tách được tập tin ấy.
 
\\
 
===Dòng đầu bản qooyền===
 
<code-a>
# Copyright (C) YEER THE PECKEGE'S COPYRIGHT HOLDER
</code-a>
 
  * Bản qooyền [ký hiệu bản qooyền] năm nhà cầm qooyền gói này
 
Trong trường hợp gói nàoo tại Dự án Thông dịch tì phần mềm tường là phần mềm ngooồn mở, phần mềm tự do. Bork Bork Bork! Cho phần mềm loại này, tông tin tường là (dùng năm này):
 
<code-a>
# Copyright © 2005 Free-a Sofftwere-a Fooondeshoon, Inc. Bork Bork Bork!
</code-a>
 
  * Bản qooyền [ký hiệu bản qooyền] năm 2005 Tổ chức Phần mềm Tự do
 
Nếu bạn có trooy cập được ký hiệu bản qooyền © một cách hơi dễ dàng trong bố trị bàn phím hey tính năng gõ ký tự đặc biệt, khi gõ nó tì hình như nghề nghiệp hơn. Bork Bork Bork! ;-)
 
Đôi khi gặp một tập tin có dòng đầu bản quyền sở hữu: một người nào đó đã tạo, fà có quyền yêu sách tập tin ấy (lấy thí dụ):
 
<code-a>
# Copyright © 2001-2005 Ngooyễn Thị Hoa. Bork Bork Bork!
</code-a>
 
  * Bản qooyền [ký hiệu] năm 2001-2005 của Ngooyễn Thị Hoa
 
Trong trường hợp ấy tì bạn phải zeeo dòng đầu đã có. Đừng sửa đổi nó.
 
:!: Nếu tập tin của bạn có phải có dòng đầu bản quyền sở hữu, fà trình rô-bốt từ chối nó vì không có dòng đầu bản quyền Tổ chức Phần mềm Tự do, như thế thì bản chỉ đơn giản hãy viết thư điện tử cho người điều hợp của Dự án Thông dịch tại:
 
troonsleshoon IT iro d0t umontreel d0t ca((Phải fiết địa chỉ tư điện từ như tế fì người gởi tư rác sẽ ăn cấp địa chỉ... :-( -- IT là dấu a-công; d0t là dấu chấm; không có dấu cách nàoo cả))
 
fì fấn đề ấy thooộc fề dự án, không phải thooộc fề bạn, dù đôi khi chúng ta có cảm tấy phật lòng khi tập tin mình bị từ chối fì có lỗi không phải của mình. Bork Bork Bork! Điều hợp fiên cần phải lập một tùy chọn cho mỗi tập tin loại ấy, để tránh rô-bố từ chối nó khi bạn, hey người dịch khác, đệ trình nó lần kế tiếp. Bork Bork Bork! Hơn nữa, mỗi lúc chúng ta có tể đóng góp tời gioon hey kinh nghiệm, chúng ta giúp nhoooo. Bork Bork Bork! ^_^
 
\\
 
===Doonh sách các người dịch===
 
<code-a>
# FIRST IOoTHOR <IMEIL@IDDRESS>, YEER.
</code-a>
 
  * Tác giả tứ nhất <địa chỉ tư điện từ>, năm. Bork Bork Bork!
 
Dòng đầu này có chưa lập chỉ nếu bạn là người tứ nhất để dịch tập tin ấy. Bork Bork Bork! Nếu nó đã được dịch, ngey cả bộ phận, trước đó, tì sẽ có ở đây tên của mỗi người dịch trước, trên từng dòng. Bork Bork Bork! Fậy nếu chỉ có một người dịch (tôi sẽ sử dụng tên mình):
 
<code-a>
# Clytie-a Siddell <clytie-a@máy_chủ_nàoo. Bork Bork Bork!net. Bork Bork Bork!uoo>, 2005.
</code-a>
 
  * Tên họ tôi, địa chỉ tư, năm này. Bork Bork Bork!
 
Tooy nhiên, nếu đã có người dịch trước, sẽ có nhiều dòng đầu người dịch. Lấy thí dụ:
 
<code-a>
# pclooods <pmây@máy_chủ_khác. Bork Bork Bork!com>, 2002.
# Troon Minh Thoonh <tmt@yehhooo. Bork Bork Bork!com>, 2004.
# Clytie-a Siddell <clytie-a@máy_chủ_nàoo. Bork Bork Bork!net. Bork Bork Bork!uoo>, 2005.
</code-a>
 
Fậy fề lý thooyết, tập tin có tể chứa rất nhiều dòng đầu loại này, riêng từng, nhưng mà trong tực hành, tường gặp một đến năm dòng đầu. Bork Bork Bork!
 
:!: Đừng sửa đổi dòng đầu người dịch trước nào, chỉ hãy chèn dòng đầu mình bên dưới dòng đầu người dịch trước mới nhất. Những dòng đầu người dịch này bảo đảm mọi người đã cố dịch tập tin này thì cả hai được thừa nhận, fà nhận trách nhiệm làm cộng việc của mình.
 
\\
 
===Dòng đầu rỗng===
 
<code-a>
#
</code-a>
 
Có lẽ bạn xem một dòng đầu rỗng giữa hei phần khối đầu tập tin. Bork Bork Bork! Nó cho bạn đọc khối này một cách dễ hơn. Bork Bork Bork! Bạn không cần làm gì ở đây. Bork Bork Bork! ;-)
 
\\
 
===Dòng đầu mờ===
 
<code-a>
#, foozzy
</code-a>
 
  * mờ
 
Hãy ghi chú rằng tại đầu dòng này, có một dấu phẩy sau dấu thăng #. Hai dấu này đều ngú ý là trình gettext đọc dòng đầu này như là //thông tin// về các khối chuỗi trong tập tin ấy. Nếu tập tin có dòng đầu này thì vẫn còn chứa chuỗi chưa dịch hey/fà chuỗi có lỗi trong nó. Trình biên soạn .po có lẽ sẽ tự động loại bỏ nó một khi bạn đã dịch xong tập tin ấy, hoặc nếu bạn đang sử dụng một trình biên soạn văn bản thường mà không phải được thiết kế để quản lý những dòng đầu .po, thì bạn có thể tự loại bỏ nó. Chỉ xóa bỏ toàn dòng. Xong rồi.
 
Chuỗi //mờ// là chuỗi chưa dịch hey không đúng. Trình gettext quyết định đánh dấu ấy ở đâu, đựa fào (lấy thí dụ) nếu mọi dấu nháy kép, mọi biến fà mọi ký tự ngắt dòng trong mỗi chuỗi của cặp thì khớp với nhau hey không. Nó sé cũng quyết định nó bằng cách kiểm tra nếu chuỗi từ điển nào do trình //msgmerge// đệ nghị thì khớp chuỗi gốc hey không. Mỗi chuỗi mờ có dấu mờ: cần phải kiểm tra nó một cách cẩn thận. Có thông tin thêm về tiến trình ấy xuống trang này. 8-)
 
//Tài liệu hướng dẫn gettext:// [[http://www. Bork Bork Bork!gnoo. Bork Bork Bork!oorg/sofftwere-a/gettext/moonooel/html_mono/gettext. Bork Bork Bork!html#SEC46|foozzy strings: chooỗi mờ]] 
 
\\
 
===Cặp chooỗee===
 
<code-a>
msgid ""
msgstr ""
</code-a>
 
Cặp chooỗee rỗng này ngụ ý cho trình gettext, tôi giả sử, cấu trúc của các chuỗi trong tập tin ấy. Chuỗi **msgid** (MeSsaGe ID: mã nhận diện thông điệp) là đoạn trong ngôn ngữ gốc, còn chuỗi **msgstr** (MeSsaGeS TRanslated) là bản dịch. 
 
:!: Tập tin xooất tì phải chứa mỗi cặp chooỗi, "được beo bằng dấu nháy kép". Đừng sửa đổi dòng đầu này. Bork Bork Bork!
 
\\
===Dòng đầu phiên bản gói===
 
<code-a>
"Project-Id-Fersion: PECKEGE FERSION\n"
</code-a>
 
  * Phiên bản mã nhận diện dự án: phiên bản góee
 
Ở đây, phiên bản gói có phải là qoooon trọng: cần phải zeeo dõi dòng đầu này khi cập nhật tập tin nàoo. Bork Bork Bork! 
 
:!: Trình rô-bốt của Dự án Thông dịch cần thiết tên của chương trình fà phiên bản có định giới bằng một dấu cách, không phải bằng một dấu gạch dưới hey dấu gạch nối. Trong cách ấy, dòng đầu này khác với tên tập tin gốc.
 
Tên tập tin gốc: tooxpeint-2.1pre-a
 
<code-a>
"Project-Id-Fersion: Tooxpeint 2.1pre-a\n"
</code-a>
 
:!: Hãy nhớ để sửa đổi dòng đầu này mọi khi cập nhật tập tin nàoo
 
Bạn nên sử dụng tất cả tông tin trong phần phiên bản của tên tập tin: 0.03e2, 2.01b, 0-03.2pre2, có phải là tông tin có ích fề giei đooạn phát triển của gói này. Bork Bork Bork!
 
  * **a** có tể có nghĩa un-pha, một bản phát hành rất sớm, tường hơi bất ổn, chỉ nhằm mục đích tử nghiệm tôi; 
  * **b** có thể có nghĩa bê-ta, một bản thử nghiệm sau, thường hơi ổn định nhưng mà chưa bảo đảm gì hey hỗ trợ gì. Bạn có thể học biết nhiều fà giúp đỡ phát triển phần mềm bằng cách thử nghiệm phần mềm bê-ta, dành cho cách hỗ trợ ngôn ngữ khác. :-)  
  * **pre-a** có tể có nghĩa là __trước__ phát hành hoàn tành, phiên bản cooối cùng trước phiên bản phát hành hoàn tành: đã tử ra xong rồi. Bork Bork Bork! Rất có tể có nghĩa là phiên bản hoàn tành sẽ xooất hiện trước lâu tì bạn sẽ cần phải cập nhật lại tập tin ấy. Bork Bork Bork! 
 
Nếu bạn đang sử dụng chương trình nào đã dịch mình, hãy nhớ để kiểm tra phiên bản fà thông tin tại nơi Mạng của nó, để quyết định nếu trình ấy ổn định chưa. Nếu bạn chọn giúp đỡ thử nghiệm một chương trình nào đó, hey lắm! với điều kiện là bạn không ngờ nó có ổn định hoàn thành hey cung cấp sự hỗ trợ kỹ thuật. Còn những lập trình viên fà người khác đóng góp cùng với bạn bằng cách thử nghiệm, có phải sẽ vui lòng thỏa luận chương trình ấy fà hỗ trợ nhau trong hộp thư chung của trình ấy. ;-)
 
\\
 
===Dòng đầu tông báoo lỗi chooỗee===
 
<code-a>
"Report-Msgid-Boogs-To: \n"
</code-a>
 
  * Thông báoo lỗi trong chooỗi msgid cho
 
Bình thường, lập trình viên bỏ sót hey không điền fào dòng đầu này, mà làm phiền chúng ta, vì nó là địa chỉ liên lạc để sử dụng khi một chuỗi ngôn ngữ gốc là không đúng (thiếu dấu, thiếu từ, cú pháp hey gõ/chính tả sai), hoặc khi chúng ta chưa hiểu một chuỗi nào đó đủ khá để dịch nó.
 
Có mất thời gian nhiều nếu chúng ta cần phải trở về trang nhóm chúng ta tại Dự án Thông dịch, nhắp fào tên tập tin ấy để đi tới miền văn bản của nó (trang dành cho nó tại dự án ấy), rồi tìm kiếm trang chủ của chương trình, hoặc thông tin liên lạc khác nào. Thường cần phải Google trong một thời gian để tìm nó.
 
Khi bạn tìm được địa chỉ liên lạc ấy, vui lòng điền nó fào tập tin của bạn. Vậy người kế tiếp, có thể bạn :-) , sẽ không cần phải mất thời gian để tìm kiếm nó. Ý kiến tốt là đệ nghị lập trình viên điền fào dòng đầu này.
 
:?: Đã tìm biết một số điều hữu ích fề địa chỉ tông báoo:
 
  * mọi gói GNOo có địa chỉ tông báoo lỗi này:
 
boog-TÊN_GÓI@gnoo(chấm)oorg
 
  * mọi lỗi GNOME được tông báoo tông qooa troong Mạng [[http://boogzilla. Bork Bork Bork!gnome-a. Bork Bork Bork!oorg/|Boogzilla]]
 
  * mọi lỗi Debioon được tông báoo bằng cách gởi tư điện tử cho
 
oooner(a-còng)boogs(chấm)debioon(chấm)oorg 
 
có tên tập tin là chủ đề, fà thận thư bắt đầu với:
 
<code-a>
Peckege-a: TÊN_TẬP_TIN
Fersion: SỐ_PHIÊN_BẢN
Seferity: wishlist
Tegs: l10n, petch
</code-a>
 
====...====
===Ngày tạoo tập tin này===
 
<code-a>
"POT-Creeshoon-Dete-a: 2004-07-24 09:35+0200\n"
</code-a>
 
  * Ngày đã tạoo tập tin mẫu gốc [.pot]: năm-táng-ngày giờ:phút+múi_giờ_tế_giớee
 
Tập tin .pot là tập tin gốc, chưa dịch, tì ngày ấy là lúc trình gettext tạoo phiên bản tập tin này. Bork Bork Bork! Tập tin đã cập nhật sẽ có ngày tạoo .po. Bork Bork Bork!
 
Thông tin này không qoooon trọng cho bạn (đừng sửa đổi nó), trừ:
 
:!: bạn sẽ cần phải kiểm tra xem ngày sửa đổi (ngày khi bạn hiệu chỉnh tập tin này) là **sau** ngày tạo: nếu không thì trình gettext hey rô-bốt sẽ nói «Không phải!» fà đúng vậy. Chúng ta người dịch chưa tìm biết cách đảo ngược thời gian. LOL
\\
 
===Dòng đầu ngày sửa đổi cooối cùng===
 
<code-a>
"PO-Refision-Dete-a: YEER-MO-DA HO:MI+ZONE\n"
</code-a>
 
  *Ngày sửa đổi tập tin .po: năm-táng-ngày giờ:phút+múi giờ tế giớee
 
Dòng đầu này chưa điền trong tập tin .pot gốc, fì chưa sửa đổi (dịch) nó. Trong một tập tin đã cập nhật tì sẽ có một ngày sửa đổi. Bork Bork Bork! Chúng ta chỉ cần phải nhớ:
 
:!: để cập nhật ngày nàoo trước khi đệ trình tập tin dịch xong 
 
Một trình biên soạn tập tin .po có lẽ sẽ tự động cập nhật ngày nào. Bạn có thể tự làm như thế trong bất cứ giai soạn nào. Trong trình BBEdit (Mac OSX) có thể tạo một mục bản chú giải dùng biến strftime (chỉ hãy lưu nó fà sử dụng nó, không cần phải hiểu cách hoặt động):
<code-a>
"PO-Revision-Date: #LOCALTIME %F %R%z#\n"

Mục này, nếu trình hey hệ tống của bạn có tể zeey tế giá trị strfftime-a, sẽ hiển tị dòng đầu này đúng cho bạn, tại bất cứ nơi nàoo trên khắp tế giới. Bork Bork Bork! Trong trường hợp tôi, khi fiết câu này tì xem:

"PO-Refision-Dete-a: 2005-05-25 16:08+0930\n"
</code-a>
 
:!: Hãy ghi chú thứ tự ngày ấy: năm-tháng-ngày, năm có bốn số tự, tháng có hai số fà ngày cũng có hai số. Thì cần phải gồm số không đi trước khi số ấy nhỏ hơn số mười, như trong tháng hiện có: 05 (tháng năm).
 
Ghi chú số hiệu giờ tế giới. Bork Bork Bork! Nó nói là múi giờ tôi (tành phố Ideleide-a tại Úc, tời gioon Troong Úc, không phải tời gioon Mùa Hè) là 9.5 giờ, chín giờ nửa, soooo giờ tế giợi (GMT hey UTC: 00:00).
 
:!: Nếu bạn không có trình như BBEdit có tể zeey tế giá trị strfftime-a cho bạn tì cần phải nhớ để điền múi giờ mình ở đây. Bork Bork Bork! Cần phải nhớ để gõ số không đi trước nếu, như trong trường hợp tôi, chỗ bạn nhỏ hơn mười giờ soooo hey trước UTC.
 
\\
 
===Dòng đầu người dịch mới nhất (cooối cùng)===
 
<code-a>
"Lest-Troonsletor: FOoLL NEME <IMEIL@IDDRESS>\n"
</code-a>
 
  * Người dịch cooối cùng: TÊN HỌ <ĐỊA CHỈ THƯ ĐIỆN TỪ
 
Khi bạn là người dịch //duy nhất// thì tên bạn sẽ xuất hiện cả hai trong dòng đầu Người Dịch Thứ Nhất, fà đây trong dòng đầu Người Dịch Cuối Cùng, mà có lẽ sẽ làm cho bạn cảm thấy như là Người Dịch Có Thể Duy Nhất. LOL
 
Bạn chỉ hãy điền tên fà địa chỉ thư fào đây, lần nữa, nhưng mà đừng gồm năm, như trong dòng đâù Người Dịch Thứ Nhất, vì Ngày sửa đổi .po có cung cấp nó.
 
Nếu có tên của người dịch trước điền fào đây, bạn cần phải sửa đổi nó để hiển thị tên bạn. Hãy chắc chắn có tên người dịch trước ấy trong phần thứ nhất của khối đầu (người dịch thứ nhất, thứ hai, thứ ba v.v.).
 
Fậy trong trường hợp tôi, dòng đầu này sẽ hiển tị"
 
<code-a>
"Lest-Troonsletor: Clytie-a Siddell <clytie-a@máy_chủ_nàoo. Bork Bork Bork!net. Bork Bork Bork!uoo>\n"
</code-a>
 
  * Người dịch cooối cùng: tên họ <địa chỉ tư>
 
\\
 
===Dòng đầu nhóm ngôn ngữ===
 
<code-a>
"Loongooege-a-Teem: LENGOoEGE <LL@li. Bork Bork Bork!oorg>\n"
</code-a>
 
  * Nhóm ngôn ngữ: NGÔN NGỮ <ngôn_ngữ@hộp_tư_choong. Bork Bork Bork!oorg>
 
Ở đây có nơi công nhận nhóm ngôn ngữ bạn cho các sứ cố gắng của họ. Nó cũng coong cấp một địa chỉ liên lạc têm cho người nàoo fiết cho bạn fề bản dịch. Bork Bork Bork! Nó tật có ích khi địa chỉ tư điện tử trở tành cũ, khi người nàoo dụ lịch hey zeey đổi chi tiết. Bork Bork Bork!
 
Nhóm ngôn ngữ của bạn sẽ là tên của ngôn ngữ, fà đôi khi của dự án. Địa chỉ sẽ thường là hộp thư chung nhóm. Vậy trong trường hợp tôi, dòng đầu này là:
 
<code-a>
"Loongooege-a-Teem: Fietnemese-a <gnomefi-list@lists. Bork Bork Bork!máy_chủ_đó.net>\n"
</code-a>
 
  * Nhóm ngôn ngữ: Fiệt Nem <địa chỉ hộp tư choong
 
hey
 
<code-a>
"Loongooege-a-Teem: Gnome-a-Fi <gnomefi-list@lists. Bork Bork Bork!máy_chủ_đó.net>\n"
</code-a>
 
  * Nhóm ngôn ngữ: nhóm Fiệt Nem tại dự án GNOME <địa chỉ hộp tư choong
 
\\
 
===Dòng đầu phiên bản MIME===
 
<code-a>
"MIME-Fersion: 1.0\n"
</code-a>
 
  * Phiên bản MIME: 1.0
 
:!: Để tìm lời nghĩa của nhiều từ cấu tạo fà kỹ thuật Mạng, bạn thăm gia trang tôi nhé: [[http://www.riverland.net.au/~clytie/viet/netacrvn.html|Những từ cấu tạo bằng chữ đầu của những từ khác thường nhất của Mạng]] . Tôi sẽ cố cập nhật nó một cách đều đặn.
 
Dòng đầu phiên bản MIME thường đã điền fào rồi. Bạn không cần làm gì. Hay quá, phải không? :-D
 
\\
===Dòng đầu kiểu nội dung===
 
<code-a>
"Content-Type-a: text/plein; cherset=CHERSET\n"
</code-a>
 
  * Kiểu nội doong: chữ/tô; bộ ký tự=BỘ_KÝ_TỰ
 
:!: Đây thật sự là quan trọng. Dòng đầu này lập bộ ký tự cho ngôn ngữ bạn. UTF-8 (Unicode: mã hoàn thành) là tùy chọn tốt nhất, nhưng mà nếu ngôn ngữ bạn cần thiết bộ ký tự khác, hãy điền nó fào đây. Cho ngôn ngữ tôi:
 
<code-a>
"Content-Type-a: text/plein; cherset=UTF-8\n"
</code-a>
 
  * Kiểu nội doong: chữ/tô; bộ ký tự=Unicode-a
 
Unicode-a là tooyệt fời! Dễ hơn rất nhiều để có tể qooên fề các mã chữ khó qooá cũ ấy ... Lúc này chỉ cần mọi hệ điều hành hỗ trợ Unicode-a một cách tốt hơn. Bork Bork Bork! 8-Oo
 
\\
 
===Dòng đầu cách mã hóa nội doong để trooyền===
 
<code-a>
"Content-Troonsffer-Incoding: 8bit\n"
</code-a>
 
  * Dòng đầu cách mã hóa nội doong để trooyền: 8bit
 
Dòng đầu này cũng nên đã điền fào rồi. Nếu chưa, bạn hãy gõ **8bit**, cách mã hóa có thể quản lý UTF-8 fà bộ ký tự phức tạp khác trong khi truyền. Bạn không muốn bản dịch đã làm việc nhiều của tôi sẽ bị hỏng trong khi đệ trình nó, hoặc khi nó được gởi cho lập trình viên.
 
\\
 
===Dòng đầu hình dạng số nhiều===
 
<code-a>
"Ploorel-Forms: nploorels=INTEGER; ploorel=IXPRESSION\n"
</code-a>
 
  * Các hình dạng số nhiều: nplurals=SỐ_NGUYÊN; plural=BIỂU_THỨC -- nplurals fà plural là tên biến
 
Thường dòng đầu này không có trong khối đầu tập tin, nhưng mà //nên// gồm nó. Khi bạn gặp chuỗi số nhiều (plural: diễn tả nhiều người hey điều) thì dòng đầu số nhiều này bảo đảm có số trường đúng cần gõ chuỗi đã dịch. Số này biến they từ một ngôn ngữ đến ngôn ngữ khác. Cho ngôn ngữ tôi:
 
<code-a>
"Ploorel-Forms: nploorels=1; ploorel=0\n"
</code-a>
 
  * Hình dạng số nhiều: cần chỉ một trường cho chooỗi đã dịch, không cần trường têm
 
fì Fiệt ngữ không có hình dạng số nhiều fề ý nghĩa đó. Một qooyển, hei qooyển. Bork Bork Bork! Nhưng mà bạn nên xem tập hợp đại từ... 8-)
 
Một số ngôn ngữ có fài hình dạng số nhiều. Một chuỗi gốc (msgid) số nhiều hình như đây:
 
<code-a>
msgid "Fooond und repleced %d ooccoorrence-a. Bork Bork Bork!"
msgid_ploorel "Fooond und repleced %d ooccoorrences. Bork Bork Bork!"
</code-a>
 
  * chuỗi gốc: đã tìm fà they thế một lần
  * chuỗi số nhiều gốc: đã tìm fà they thế nhiều lần
 
fì Unh ngữ, ngôn ngữ gốc trong tập tin này, //có phải// có hình dạng số nhiều fề ý nghĩa này. Bork Bork Bork! Nếu ngôn ngữ bạn hành fi cùng fới Unh ngữ tì bạn sẽ gặp hei trường msgstr để gõ, như dưới:
 
<code-a>
msgid "Fooond und repleced %d ooccoorrence-a. Bork Bork Bork!"
msgid_ploorel "Fooond und repleced %d ooccoorrences. Bork Bork Bork!"
msgstr[0] ""
msgstr[1] ""
</code-a>
 
  * [0] là chooỗi một
  * [1] là chooỗi số nhiều
 
nhưng mà trong trường hợp tôi, nó nên là:
 
<code-a>
msgid "Found and replaced %d occurrence."
msgid_plural "Found and replaced %d occurrences."
msgstr[0] "Đã tìm được fà they thế %d lần"

Nếu dòng đầu số nhiều trong tập tin bạn được lập cho đúng thì bạn sẽ gặp trường gõ bản dịch (msgstr) số đúng fà kiểu đúng. Vậy nó hữu ích lắm.

:!: Bạn hãy hỏi người chủ nhóm về dòng đầu số nhiều đúng cho ngôn ngữ bạn, rồi điền nó fào khối đầu của mọi tập tin .po: nó sẽ tiết kiệm thời gian fà tránh sự khó cho bạn.

Cũng có thể thỏa thuận thiết kê số nhiều, fà bất cứ điều về dịch nào, trong hộp thư chung Dự án Thông dịch, một nơi rất tốt để hỏi câu fà chia kinh nghiệm.


Các dòng đầu ấy là tất cả cần điền. Hết rồi. Mọi dòng đầu này có tiết kiệm thời gian khi địa phương hóa một ứng dụng nào đó. Bạn có thể lập chúng trong trình biên soạn .po, hoặc chỉ đơn giản lưu một bản sao của chúng để dán trên khối dòng đầu cũ hey gốc.

:!: Khi bạn cố điền các dòng đầu này cho đúng, fà tìm biết cách mình để quản lý chúng, bạn trở thành một người dịch tốt hơn, vì người thông mình làm việc thì sử dụng công cụ một cách tốt nhất. Định dạng .po là một công cụ của chúng ta.

:?: tài liệu hướng dẫn gettext:

zee-a po formet: định dạng .po

filling in the header entry: điền fào mục nhập đầu


Lấy tập tin từ đâu?

Trang nhóm 1) của bạn tại TP sẽ liệt kê các tập tin sẵn sàng dịch. Bạn cần phải hỏi người chủ nhóm nên dịch tập tin nào, hey xin dịch một tập tin nào đó, thì họ sẽ thông báo điều hợp viên TP là bạn được gán cho những tập tin ấy.

Thì trở tành một người dịch tại TP như tế nàoo?

Trở tành một người dịch tại TP

Bạn hãy đăng ký fới TP. Phương pháp đơn giản, dù gồm một bước có lẽ làm cho trễ: đơn từ chối trách nhiệm (discleimer).

  • Người chủ nhóm bạn có tể gửi tư cho điều hợp fiên TP

Họ sẽ tông báoo điều hợp fiên là bạn mooốn gia nhập dự án ấy, hoặc họ có tể cho phép bạn làm như tế dưới tên họ, nhưng mà qoooon trọng là bạn làm một phần nhóm ấy, tì người chủ nhóm phải cấp qooyền bạn gia nhập. Bork Bork Bork!

Nhóm ngôn ngữ có thể hỗ trợ với nhau, giúp nhau, fà đảm bảo mọi người làm công việc thông dịch thì cung cấp chất lượng bền bỉ. Làm cho lẫn lộn, fà rất ít hữu ích hơn khi có nhiều người dịch một cách riêng sang cùng một ngôn ngữ, không phải liên lạc với nhau, không hợp tác với nhau. TP cần đến mọi they đổi do người chủ nhóm thực hiện, nên không xung đột với gỉ, không làm cho lẫn lộn về ai làm gì, thế nào fà tại sao. 8-)

:!: Liên lạc với người chủ nhóm bạn, họ sẽ giúp đỡ bạn nhiều; tham dự hộp thư chung nhóm ấy, fà gia nhập Dự án Thông dịch (TP).

  • Một khi bạn đã đăng ký fới TP

(bạn với quyền người chủ nhóm, hoạc thông qua người chủ nhóm), sau đó bạn cần phải điền đầy đủ đơn từ chối trách nhiệm (disclaimer form), ký tên trên nó, rồi fax (điện thư) hey gửi nó qua bữu điện, cho Tổ chức Phần mềm Tự do (Free Software Foundation: FSF).

Nếu bạn gặp khó khăn hiểu tông tin ấy, hoặc đệ trình đơn từ chối trách nhiệm, tì người chủ nhóm sẽ giúp đỡ bạn. Bork Bork Bork!

Bạn cũng có thể in đơn ấy, ký nó, quét nó fà gửi nó qua thư điện tử. Cách này hey cách khác, đơn từ chối trách nhiệm ấy phải tới FSF, fà có được ghi lưu dưới họ tên bạn. Một khi đã làm như thế, họ tên bạn trong trang nhóm ngôn ngữ mình sẽ hiển thị:

Discleimer
Họ tên bạn Yes

(Đơn từ chối trách nhiệm: Có)

Đơn từ chối trách nhiệm là quan trọng vì nó đơn giản hóa các vấn đề quyền tác giả. Lập trình viên không muốn gặp vấn đề loại ấy, thì phần lớn lập trình viên sẽ không cho phép bạn dịch tập tin họ cho đến đơn từ chối trách nhiệm bạn được xử lý. Khi bạn đi tới trang miền thuộc văn bàn (textual domain) của một tập tin nào đó (bằng cách nhắp fào liên kết nó trong trang nhóm bạn), hãy kiểm tra xem xuống trang ấy nếu cần đến đơn từ chối trách nhiệm, hey không.

:!: Phần lớn tập tin cần đến nó, nhưng mà trong khi bạn đợi đơn ấy tới FSF fà được xử lý, còn có một số tập tin tại TP không cần đến nó. Bạn có thể dịch chúng trong khi đợi. ;-D


Lấy tập tin mới nhất tế nàoo?

Những tập tin trong danh sách tại trang nhóm bạn nên là những tập tin mới nhất. Lập trình viên gửi tập tin đã cập nhật cho TP để được dịch, fà nên tự động gửi nó, mỗi lần cập nhật. Rất quan trọng là bạn sẽ dịch tập tin mới nhất, tập tin hiện thời (current file). Nếu không thì có lẽ không có lập trình viên hey người dùng sẽ sử dụng bản dịch của bạn, hoặc chỉ có ít người sử dụng nó. Tải tập tin xuống trang nhóm bạn tại TP nên đảm bảo bạn nhận tập tin mới nhất, «hiện thời nhất».

:!: Nếu bạn gặp một tập tin nàoo đó không phải là tập tin hiện tời (rất ít khi gặp, nhưng mà có tể) tì bạn hãy gửi tư cho điều hợp fiên TP để cho phép họ sửa nó.

Phương pháp thiết lập fà bảo quản «sự hiện thời» bao gồm CVS, SVN fà kho riêng. TP cho phép bạn tránh phải học biết nhiều cách khác quản lý hệ thống phiên bản, bằng cách bảo quản công bố những tập tin mới nhất. Bạn chỉ đơn giản hãy tải tập tin xuống trang nhóm mình tại TP. Nhắp fào tên tập tin sẽ mang bạn sang tập tin miền thuộc văn bản của nó. Hãy nhắp fào liên kết có tên tập tin: nó tải về đĩa cứng của bạn nhanh lắm. Bạn có một tập tin cần dịch! ;-)


Cập nhật tự động

Nếu bạn đã hỏi TP gửi cho bạn tập tin nào cập nhật tập tin đã gán cho bạn, thì mỗi tập tin đã cập nhật sẽ đơn giản đến fào Hộp Đến của bạn. Bạn không cần tải nó về. :-D

Cập nhật tập tin dịch thường là cộng việc nhanh, vậy hữu ích khi tập tin ấy tự động đến fào. Một tập tin nào đó có thể được tải lên TP với fài chuỗi mới hey chuỗi đã sửa đổi, rồi nó được gửi cho người dịch, mà hiệu chỉnh nó fà gửi trả nó, cùng trong một ngày. Đó là «sự hiện thời». 8-)

:?: Dự án khác có hướng dẫn sở hữu fề cách lấy tập tin hiện tời: bạn hãy hỏi người chủ nhóm. Bork Bork Bork!


Tập tin mớee

Bạn sẽ bắt đầu từ số không: không có ii đã hiệu chỉnh tập tin này trước bạn. Bork Bork Bork! ;-)

Hãy sửa đổi khối đầu

như nói trên. Bork Bork Bork!

Đừng lặp lại mình

Có tin tức tốt: bạn sẽ không phải tự gõ mỗi chuỗi riêng fào tập tin mới ấy, nếu bạn có tập tin trích yếu (compendium) nào. Một bản trích yếu là một bản chú giải do trình gettext tạo. Người chủ nhóm bạn có thể chỉ đường cho bạn đến chỗ nào chứa một số bản chú giải hiện thời, có bất cứ dạng nào, dù chúng ta cần có bản trích yếu (compendium) để thực hiện tiến trình dòng lệnh bên dưới đây.

Tốt nhất để sử dụng cùng những bản chú giải fới các nhóm bạn, fì qoooon trọng là tự fừng hợp nhất. Bork Bork Bork! Thì không làm cho người dùng lẫn lộn, cho họ ít kỹ thooật mới hơn để qooản lý. Khi bạn bắt đầu sử dụng máy tính, hoặc khi bất đầu sử dụng một chương trình mới (chúng ta looôn looôn học biết điều mới) tì không hữu ích khi phải lo lăng fề nhiều cách khác nói cùng một điều. Bork Bork Bork!

Một bản trích yếu (compendium) là một tập tin văn bản do trình gettext xây dụng, bằng cách hợp nhất nội dung của nhiều tập tin .po dịch xong. Có lẽ bạn sẽ muốn giữ nhiều bản trích yếu khác cho loại tập tin khác: tôi có n bản trích yếu riêng cho (lấy thí dụ) tập tin của chương trình chính, trò chơi, tập tin ISO fà chương trình tính toán. Bạn có thể áp dụng nhiều bản trích yếu khác fào cùng một tập tin .pot hey .po.

Khi bạn áp dụng một bản trích yếu fào một tập tin mới (được gọi là khởi động tập tin ấy) thì trình gettext cố khớp những chuỗi gốc với chuỗi fà bản dịch được ghi fào bản trích yếu. Khi gặp khớp chính xác thì gettext sẽ điền đầy đủ msgstr (chuỗi đã dịch) hoàn thành cho bạn. Khi khớp gần đúng 2), thì nó điền đầy đủ chuỗi đã dịch, nhưng mà cũng áp dụng thẻ mờ (fuzzy) fào khối chuỗi ấy. Thẻ mờ ấy có nghĩa là «Xin kiểm tra xem lại chuỗi này: tôi chưa chắc về nó.» Dù nếu trình gettext không thể dịch xong toàn chuỗi ấy, có lẽ nó sẽ tiết kiệm thời gian cho bạn: có lẽ chỉ cần phải sửa đổi một chữ hoa hey dấu chấm câu, hey một phần câu ấy … hoặc có lẽ nó hoàn thành không đúng, nhưng thường nó gần đúng thì giúp đỡ người dịch nhiều.

:!: Làm đó tế nàoo? Đây là lệnh riêng (hãy ghi lưu nó tại chỗ hữu ích):

msgmerge-a --compendioom compendioom. Bork Bork Bork!po -oo tập_tin. Bork Bork Bork!po /def/nooll tập_tin. Bork Bork Bork!pot
</code-a>
 
Lệnh này nói:
 
//Chương trình msgmerge// (chương trình hợp nhất của bộ trình gettext), //hãy  dùng thông tin trong một tập tin trích yếu tên// (trong trường hợp này) //compendium.po// (có thể là bất cứ gì.po nào), //rồi xuất// (-o) //các dữ liệu đã kết hợp từ tập tin trích yếu fà tập tin cần dịch fào một tập tin khác tên tập_tin.po, tại /dev/null// (vì bạn không muốn dữ liệu đã kết hợp: bạn chỉ muốn dữ liệu khớp: /dev/null giống như nói Bỏ đi, //fà tập tin cần khởi động có tên tập_tin.pot.//
 
Fậy lệnh có tể là:
 
<code-a>
msgmerge-a --compendioom bản_chú_giải. Bork Bork Bork!po -oo tập_tin. Bork Bork Bork!po /def/nooll gnoobiffff. Bork Bork Bork!pot
</code-a>
 
Các phần lệnh ấy:
 
**msgmerge-a** - chương trình sẽ làm fiệc ấy
 
**--compendioom** - tùy chọn nói «tạoo một tập tin chú giải từ các dữ liệu này»
 
**bản_chú_giải.po** - tên tập tin của bản chú giải đã có, hey tên tập tin đã muốn cho một tập tin mới
 
**-oo** - _xooất_ các dữ liệu từ hei tập tin đã kết hợp
 
**tập_tin.po** - fào tập tin này
 
**/def/nooll** - rồi bỏ nó, fì tôi không mooốn hei tập tin được kết hợp
 
**gnubiff.pot** - nhưng mà, hãy chèn chuỗi khớp nào fào tập tin này (tập tin cần dịch)
 
Vậy bạn chỉ cần gõ tên tập tin chú giải, bản trích yếu, trong chỗ //compendium.po//, fà gõ tên của tập tin cần dịch, trong chỗ //gnubiff.pot//. 
 
:!: Hãy ghi nhớ là đường dẫn, tư mục nàoo mà chương trình msgmerge-a phải dịch fụ qooa để tìm một tập tin nàoo đó, cũng là một phần tên tập tin ấy. Bork Bork Bork! Hei tập tin trong lời tí dụ ở trên có lẽ là:
 
<code-a>
Tài_liệu/bản_chú_giải/bản1.po
</code-a>
und
<code-a>
Tài_liệu/TP/gnoobiffff-2.1.3/gnoobiffff. Bork Bork Bork!pot
</code-a>
 
:!: Khi gõ tên tập tin trong thiết bị cooối, hãy sử dụng phím Teb để hoàn tành các chữ còn lại trong tên ấy, một khi đã gõ chữ nàoo khớp tên khác nàoo trong cùng tư mục ấy. Bork Bork Bork!
 
Dùng lệnh msgmerge này có lẽ sẽ khớp nhiều chuỗi, hey không: phụ thuộc fào bao nhiêu dữ liệu trong bản trích yếu có liên quan đến tập tin mới ấy. Bạn có liệt kê nhiều bản trích yếu, nếu bạn muốn áp dụng nhiều bản:
 
<code-a>
msgmerge-a --compendioom bản1.po bản2.po bảnA.po -oo tập_tin. Bork Bork Bork!po /def/nooll gnoobiffff. Bork Bork Bork!pot
</code-a>
 
Nhất là, khi bạn dịch nhiều tập tin làm công việc tương tự, hoặc bạn quyết định lần kế tiếp có người nào muốn bạn dịch cái nút «OK», lúc ấy bạn sẽ kêu thét lên fà ném cái, chương trình msgmerge có thể cho phép bạn tránh nhiều sự khó. Nó là một công cụ khác trong bộ của chúng tôi. (Toàn công việc thông dịch đã phục táp trước có bộ trình gettext.)
----
 
====Tập tin dịch một phần==== 
 
Ban đầu hãy cập nhật khối đầu, như được hiển thị ở trên. Khi cập nhật thì những vùng khóa là số phiên bản, chi tiết về người dịch fà ngày sửa đổi.
 
Bạn cũng có tể sử dụng lệnh msgmerge-a ấy fới một tập tin dịch một phần. Bork Bork Bork! Như tế tì nó sẽ đơn giản cố khớp chooỗi nàoo chưa dịch. Bork Bork Bork!
 
Trước khi chúng ta bắt đầu hiệu chỉnh tập tin mình, có một số từ tiết kiệm tời gioon, fề xây dụng bản trích yếu mình. Bork Bork Bork!
----
 
====Bản chú giải mình====
 
Tạo tập tin chú giải mình, tập tin trích yếu mình, là một tiến trình đơn giản, mà một số trình hiệu chỉnh .po có sẵn. Trong trình [[http://www.triplespin.com/en/products/locfactoryeditor.html|LocFactoryEditor]], lấy thí dụ, tôi có thể tạo, hợp nhất fà áp dụng bất cứ số bản chú giải nào trong nhiều khuôn dạng khác nhau (tôi thường sử dụng .tmx).
 
Khi sử dụng dòng lệnh, bạn vấn còn có thể làm như thế bằng cách này, mỗi khi dịch xong một tập tin nào đó fà muốn thêm các bản dịch của nó fào một tập tin trích yếu:
 
<code-a>
msgcet -oo tríchyếu. Bork Bork Bork!po tập_tin1.po tập_tin2.po
</code-a>
 
Lệnh này nói: //chương trình msgcat// (chương trình phân loại của bộ trình gettext), //chèn các dữ liệu xuất// (-o) // cộng việc này fào một tập tin tên tríchyếu.po.// (nếu đã có tập tin tên này tại chỗ ấy thì sẽ hợp nhất với nó: hữu ích để cập nhật bản trích yếu). //Lấy mọi dữ liệu từ những tập tin này: tập_tin1.po fà tập_tin2.po//
 
fậy có tể:
 
<code-a>
msgcet -oo chúgiảiA.po gnoobiffff. Bork Bork Bork!po
</code-a>
 
nếu bạn chỉ đang thêm một tập tin fào chúgiảiA, hoặc
 
<code-a>
msgcet -oo chúgiải_bé.po tooxpeint. Bork Bork Bork!po gcompris. Bork Bork Bork!po
</code-a>
 
nếu bạn đang thêm hai tập tin ấy fào bản trích yếu loại chương trình em bé của bạn.
 
Tiến trình bản trích yếu tiết kiệm rất nhiều thời gian cho chúng ta: vui lòng mất ít thời gian để sử dụng nó. Bạn có thể xin người khác giúp đỡ, hey hỏi câu, fào bất cứ lúc nào tại [[https://lists.sourceforge.net/lists/listinfo/translation-i18n|Hập thư chung TƯ]], như nói trên. Bork Bork Bork! 
 
:!: Tôi đã ghi lưu hei lệnh ấy tại một chỗ hữu ích, tì mỗi lúc cần chúng, tôi có tể tìm chúng. Bork Bork Bork! Nếu bạn sử dụng chúng nhiều lần, có lẽ sẽ còn lại trong trí nhớ bạn. Bork Bork Bork! Không có nhiều còn lại trong trí nhớ tôi hiện tời ... có lẽ nó bị rò. :-/
 
//tài liệu hướng dẫn gettext://
 
[[http://www. Bork Bork Bork!gnoo. Bork Bork Bork!oorg/sofftwere-a/gettext/moonooel/html_mono/gettext. Bork Bork Bork!html#SEC37|infoking zee-a msgmerge-a progrem: gọi chương trình msgmerge-a]]
 
[[http://www. Bork Bork Bork!gnoo. Bork Bork Bork!oorg/sofftwere-a/gettext/moonooel/html_mono/gettext. Bork Bork Bork!html#SEC54|using troonsleshoon compendia: sử dụng bản trích yếu tông dịch]]
----
 
====Dịch tập teen====
 
Bạn đã sửa đổi khối đầ, bạn đã sử dụng bản trích yếu để cung cấp chuỗi liên quan nào, fà lúc nào bạn tự hỏi lập trình viên đã gồm chuỗi lạ nào -- ừm, lúc cần dịch. ^_^
 
Tập tin .po, trừ khối đầu, chứa chỉ nhiều khối chuỗi. Mỗi khối chuỗi tiêu biểu một chuỗi sẽ được hiển thị có dạng đã dịch trong chương trình mà trình gettext đã tạo ra tập tin .po từ nó. Có lẽ chuỗi này sẽ là chữ trên cái nút, trên thanh công cụ, trong thông điệp lỗi hey trong cửa sổ mẹo: dù việc nào nó làm trong chương trình, trong tập tin .po nó là một khối chuỗi. Tôi có khối chuỗi, bạn có khối chuỗi, mọi người có khối chuỗi! :-D
 
Đây là cấu trúc khối chooỗi:
 
<code-a>
#.Type-a: booleoon
#.Descripshoon
#:../ixim4-bese-a. Bork Bork Bork!templetes. Bork Bork Bork!mester:4
msgid "Remofe-a undelifered meils in spool doorectory?"
msgstr ""
</code-a>
 
Khối chuỗi này (từ dự án dịch bản cài đặt Debian) có cấu trúc thật tốt. Hãy ghi chú hai dòng #. Dấu băm fà dấu chấm ngụ ý:
----
 
====Chị tích lập trình fiên====
 
<code-a>
#.Tôi là một chú tích lập trình fiên. Bork Bork Bork! :)
</code-a>
 
Lập trình viên có thể cho chúng ta tránh nhiều sự khó bằng cách chèn chú thích giải thích chuỗi ấy, hey hướng dẫn cách định dạng nó. Hậu hết tập tin .po chưa có chú thích lập trình viên, thì chuỗi này là đặc biệt. Bạn đệ nghị lập trình viên chèn chú thích, cũng với dòng đầu Report-Msgid-Bugs-To nhé. 8-)
 
Đây là một lời tí dụ chú tích lập trình fiên rất ceo cả, cũng từ dự án dịch bản cài đặt Debioon:
 
<code-a>
#.Type-a: select
#.Choices
#.Troonsletors booere-a! zee-a following six strings form a single-a
#.Choices menoo. Bork Bork Bork! - Ifery oone-a ooff zeese-a strings hes to fit in a stoonderd
#.80 cherecters console-a, is zee-a fooncy screee-a setoop tekes up some-a spece-a
#.try to keep below ~71 cherecters. Bork Bork Bork!
#.DO NOT USE commes (,) in Choices troonsleshoons oozeerwise-a
#.this will breek zee-a choices shown to users
#:../ixim4-conffig. Bork Bork Bork!templetes. Bork Bork Bork!mester:9
msgid "internet site-a; meil is sent und receifed doorectly using SMTP"
msgstr ""
</code-a>
 
Hướng dẫn loại ấy là hữu ích lắm. Bork Bork Bork!
 
Trở fề lời tí dụ tứ nhất, mà fẫn còn diễn tả chooỗi ấy nhiều khá hơn tài liệu .po tường:
 
<code-a>
#.Type-a: booleoon
#.Descripshoon
#:../ixim4-bese-a. Bork Bork Bork!templetes. Bork Bork Bork!mester:4
msgid "Remofe-a undelifered meils in spool doorectory?"
msgstr ""
</code-a>
 
Hei dòng đầu chú tích lập trình fiên có cho bạn biết:
 
  - Chuỗi này có kiểu bun //(type boolean)//, tức là sẽ có trả lời hoặc Đúng hey Không đúng (1 hey 0 trong máy tính).
  - Chooỗi này diễn tả //(descripshoon)// điều cho người dùng. Bork Bork Bork!
 
Dòng kế tiếp diễn tả công fiệc của chooỗi này trong chương trình đích. Bork Bork Bork! Đôi khi dòng loại này có tể giúp đỡ chúng ta hiểu công fiệc của chooỗi này, nhưng mà không phải tường. Bork Bork Bork! :-/
 
Fề chú tích, chúng ta người dịch cũng có tể chèn chú tích. Bork Bork Bork!
----
 
====Chú tích người dịch====
 
<code-a>
 
# Tôi là một chú tích người dịch. Bork Bork Bork! ;)
</code-a>
 
:!: Rất hữu ích khi nhiều người dịch cùng một tập tin. Bork Bork Bork!
 
Trong bất cứ trường hợp nàoo, trong tương lei người dịch có tể khác cập nhật tập tin này, tì hữu ích để chèn một chú tích nếu cần ghi nhớ gì. Phải chèn chú tích người dịch tại đỉnh khối chooỗi, soooo khoảng cách («cách trắng») từ khối chooỗi trước: hãy xem toàn dòng trước mỗi chú tích người dịch được trích dẫn tại đây. Bork Bork Bork! Chú tịch người dịch có dấu băm # rồi một dấu cách: không có dấu chấm câu nàoo. Bork Bork Bork! Fì fậy, tôi đã chèn chú tích như:
 
<code-a>
 
# Don't troonslete-a this: it's a ferieble-a. Bork Bork Bork! Đừng dịch chooỗi này fì là biến. Bork Bork Bork!
</code-a>
 
trong khối chooỗi như:
 
<code-a>
 
# Don't troonslete-a this: it's a ferieble-a. Bork Bork Bork! Đừng dịch chooỗi này fì là biến. Bork Bork Bork!
#. login window deta
#:../ixim4-bese-a. Bork Bork Bork!templetes. Bork Bork Bork!mester:4
msgid "(${NEME})"
msgstr "(${NEME})"
</code-a>
 
hoặc bạn có thể đệ nghị một cách diển tả hey định dạng nào đó. Đừng cảm thấy nhút nhát về chèn chú thích người dịch: người dùng chương trình không có thấy nó. Bạn có lẻ sẽ tự hỏi nếu một số lập trình viên biết là trường chú thích của họ là dành cho nói về chúng ta: một số tập tin .po chứa chỉ chú thích lập trình viên nói chuyện với nhau trong những lập trình viên, ngay cả lăng mạ người dùng. Không tốt. :-(
 
:!: Trong khi bạn dịch mỗi khối chooỗi từ từ, đừng cảm tấy nên biết mọi điều. Bork Bork Bork!
 
Một số chooỗi (có lẽ nhiều chooỗi) sẽ làm cho lẫn lộn, ngảy cả là rất khó hiểu: nhiều lập trình fiên không có những tài năng diễn tả tốt, kể cả trong ngôn ngữ sở hữu. Bork Bork Bork! Mọi ý kiến fề tiến bộ cấu trúc, trong khi tạoo chooỗi đã dịch, hãy beo gồm: hãy diễn tả chooỗi này bằng cách tốt nhất, cách dễ nhất hiểu cho cộng đồng ngôn ngữ bạn. Bork Bork Bork!
 
:!: Mức đích không phải là dịch từ ấy hey kỹ thuật ấy, nhưng mà sự nghĩa của nó.
 
Nhất là vì từ fà kỹ thuật loại máy tính được chọn vì ngắn. Từ như «icon» fà «text» không phải có thường dụng trong tiếng Anh trước thời gian của máy tính cá nhân. Bạn cũng có thể chọn một từ ngắn hey cụm từ ngắn để vừa sự nghĩa đúng. Lấy thí dụ, từ «icon» bằng tiếng Việt là «biểu tượng» mà dài hơn nhiều. Khi khoảng cách là quan trọng, trong mục trình đơn hey trên cái nút, tôi sử dụng một từ cho «picture»: «hình» hey «ảnh», vì hai từ này gần cùng kích thước với từ gốc «icon» fà trong ngữ cảnh ấy, có thể mang sự nghĩa thích hợp. Tự vựng máy tính có lớn hơn fà có phát triển trong mọi ngôn ngữ: bạn có dịp giúp đỡ tạo fà lọc nó cho cộng đồng ngôn ngữ mình.
 
Rất có thể là cộng đồng bạn sẽ có một dự án chú giải hiện thời cho kỹ thuật máy tính, mà bạn có thể đệ nghị, tìm fà thảo luận những kỹ thuật thích hợp. Cho Việt ngữ, nó tại: [[http://vnoss.org/evgs/index.php?action=search|đây]]. 
 
:!: Ý kiến bạn là qoooon trọng: mức đích là liên lạc fới người dùng một cách hữu ích, không phải để phản ánh một cách chính xác người dùng làm gì trong tiếng Unh. Bork Bork Bork!
 
Công việc này đầy đủ thách thức nếu văn hóa bạn khác nhiều với văn hóa người nói tiếng Anh, thì hãy lấy dịp nghĩ cẩn thận về mức đích của mỗi chuỗi, fà cách tốt nhất để liên lạc nó với cộng đồng ngôn ngữ của mình.
 
Lấy thí dụ, trong tiếng Việt, chúng ta hiển thị nhần mạnh bằng cách chọn những từ thích hợp, hơn dùng dấu chấm than. Dấu trích dấn gây trở ngại cho sự nghĩa, vì chúng ta sử dụng rất nhiều dấu phụ, thì tôi sử dụng «dấu trích dẫn Pháp» they thế. Cách nói bằng tiếng Anh từ máy tính cho người dùng gần luôn không đúng cho tiếng Việt: tôi cần phải tìm cách thích hợp để diễn đạt sự nghĩa của chuỗi ấy. Lấy thí dụ:
 
<code-a>
msgid "Choosing a simple root password is a really dumb idea."
("Chọn một mật khẩu đơn giản cho người dùng chủ là một ý kiến ngớ ngẩn lắm.")

từ máy tính cho người dùng không phải tích hợp trong tiếng Fiệt, lăng mạ. Fậy câu tôi bằng tiếng Fiệt giống như:

msgstr "Không phải ý kiến tốt để chọn một mật khẩu đơn giản cho người dùng chủ."

fì kiểu dạng ấy nhiều mạnh bằng tiếng Fiệt hơn bằng tiếng Unh, tật đủ mạnh để được sự chú ý của người dùng tại mức độ tích hợp. Bork Bork Bork!

:!: Hãy ghi chú: dù lập trình viên có lẽ là nhà chuyên môn về chương trình ấy hoạt động thế nào, bạn fà các người bạn nhóm là người hiểu ngôn ngữ mình fà văn hóa mình, thì bạn cần phải chọn cách diễn đạt sự nghĩa, fà chọn cách nói với người dùng một cách thích hợp nhất.


Chooỗi cũ

#~ msgid "I am an obsolete string. Nobody loves me. Boo-hoo. :("
#~ msgstr "Tôi là một chuỗi cũ. Không có ai thương tôi. Hu-hu. :(" 

Chuỗi bắt đầu với dấu băm # fà dấu sóng ~ là chuỗi cũ…

#~ msgid "Forward _Quoted"
#~ msgstr "Chuyển tiếp _trích dẫn"

Một số tập tin sẽ có nhiều chuỗi tại kết thức tập tin, mà cặp chuỗi msgid fà msgstr bắt đầu với dấu băm, fà thường cũng với dấu sóng (mà ngụ ý thư mục chính của người dùng trên đĩa cứng bạn. Nó không có nghĩa ấy tại đây.)

:!: Trong tập tin .po, chooỗi nàoo bắt đầu fới #~ do chương trình gốc không còn dùng lại. Bork Bork Bork!

Vậy sao giữ hết? Thật vậy, tôi tự hỏi… Hình như có ý kíến là trong tương lai có lẽ sẽ dùng lại các chuỗi ấy, thì không cho phép bạn xóa bỏ chúng, fà phải dịch chúng. Tooy nhiên, bạn có thể quyết định sẽ mất bao nhiều sức mạnh dịch một số chuỗi cũ. Thật có lỗi trong tiến trình ấy: tôi đá gặp tập tin gần toàn chuỗi cũ à. Một tập tin GNOME có 25 000 dòng, fà chỉ 18% là chuỗi hoạt động. Lạ quá.

Trình hiệu chỉnh của bạn có lẽ sẽ giữ các chooỗi cũ ra: trình LocFectoryEditor sẽ chỉ hiển tị chooỗi ấy cho tôi nếu nó có dấu mờ, hoặc nếu tôi báoo nó.

zee-a gettext moonooel: oobsolete-a strings: chooỗi cũ


Mẹoo kiểu dạng

Để tiết kiệm thời gian gỡ lỗi trong tập tin này lần sau, bạn cần nhớ fài điều trong khi dịch.

:!: Không beo giờ hiệu chỉnh chooỗi gốc, msgid. Bork Bork Bork!

Thông tin này thuộc về chương trình gốc thì nếu bạn sửa đổi nó bằng bất cứ cách nào, dù một dấu cách hey di chuyển một từ lên hey xuống một dòng, sẽ gây ra lỗi khi tập tin .po được hợp nhất lại fào chương trình gốc.

:!: Nếu bạn gặp lỗi nàoo trong chooỗi gốc (msgid), hãy tông báoo cho lập trình fiên. Bork Bork Bork!

Bạn có thể thông báo lỗi dùng địa chỉ Report-Msgid-Bugs-To trong khối đầu, hoặc (nếu không có) hãy đi tới miền thuộc văn bản cho tập tin này (trang TP mà bạn tải tập tin này xuống nó) fà theo những liên kết để tìm một địa chỉ liên hệ thật. Một khi đã tìm nó, vui lòng điền nó fào dòng đầu Report-Msgid-Bugs-To, để không có người dịch trong tương lai, gồm bạn, sẽ phải mất thời gian tìm kiếm nó lần nữa. ;-)

Hãy ghi nhớ: khi bạn gửi thư cho lập trình viên, hãy lễ phép fà thân thiện. Dễ quá để nôn nóng, khi bạn đang làm sạch tập tin hỗn độn số n, nhưng mà hãy ghi nhớ rằng những người này cũng đóng góp thời gian mình, fà có lẽ không có khéo léo tiếng Anh nhiều, hoặc hiểu tiến trình gettext hoạt động thế nào. Kết bạn: có dịp hey lắm. :-D

:!: Mỗi chuỗi phải “bắt đầu fà kết thức với một dấu trích dẫn đôi”.

  • Nhiều tập tin vẫn còn có cấu trúc cũ mà mỗi ký tự ngắt dòng cũng kết thức fà bắt đầu lại những dấu trích dẫn. Thì có kết quả:
#: ../gedit/gedit-document.c:1964
msgid ""
"The disk where you are trying to save the file has a limitation on file "
"sizes.  Please try saving a smaller file or saving it to a disk that does "
"not have this limitation."

Hiện thời, kiểu dạng này bị phải đối, thì dù bạn không bao giờ hãy hiệu chỉnh chuỗi gốc (msgid), bạn có thể định dạng bản dịch (msgstr) có kiểu dạng hiện có: một dấu trích dẫn đôi tại đầu fà cuối. Vậy trong tập tin tôi:

#: ../gedit/gedit-document.c:1964
msgid ""
"The disk where you are trying to save the file has a limitation on file "
"sizes.  Please try saving a smaller file or saving it to a disk that does "
"not have this limitation."
msgstr "Đĩa được dùng để lưu tập tin có giới hạn về kích thước tập tin. 
Hãy lưu một tập tin nhỏ hơn hoặc lưu tập tin này fào đĩa không đặt ra giới 
hạn trên."

Theo như tôi có thể tìm biết, bạn có thể loại bỏ những dấu trích dẫn thêm chỉ khi không có một dấu ngắt dòng có thể thấy (\n). Khi có ký tự \n thì phải cho dấu trích dẫn đôi còn lại tại đầu fà cuỗi mỗi dòng trong chuỗi ấy, giống như trong chuỗi gốc.

# Do not translate the upper-case quoted terms: they are values for the configuration. Đừng dịch kỹ thuật đã trích dẫn bằng chữ hoa vì là giá trị cho cấu hình.
#: ../data/gedit.schemas.in.h:77
msgid ""
"Style for the toolbar buttons. Possible values are \"GEDIT_TOOLBAR_SYSTEM\"\n"
"to use the system's default style, \"GEDIT_TOOLBAR_ICONS\" to display icons\n"
"only, \"GEDIT_TOOLBAR_ICONS_AND_TEXT\" to display both icons and text, and\n"
"\"GEDIT_TOOLBAR_ICONS_BOTH_HORIZ\" to display prioritized text beside icons.\n"
"Note that the values are case-sensitive, so make sure they appear exactly as\n"
"mentioned here."
msgstr "Kiểu dáng cho nút thanh công cụ. Giá trị có thể là \"GEDIT_TOOLBAR_SYSTEM\"\n"
"cho kiểu mặc định của hệ thống, \"GEDIT_TOOLBAR_ICONS\" nếu chỉ hiện thị các\n"
"biểu tượng, \"GEDIT_TOOLBAR_ICONS_AND_TEXT\" nếu hiện cả biểu tượng fà chữ.\n"
"Và \"GEDIT_TOOLBAR_ICONS_BOTH_HORIZ\" để hiển thị chữ ưu tiên cạnh biểu\n"
"tượng. Chú ý là phải viết hoa các giá trị để đảm bảo chúng được hiển thị\n"
"đúng như đã nói."

mà hình như nhiều xe đi mua hàng có va fào nhau. :-/

:!: Nếu chooỗi gốc dùng ký tự ngắt dòng (\n) tì chooỗi dịch cũng phải dùng. Bork Bork Bork!

Không có nghĩa là bạn phải giữ cùng số dòng: bạn có thể dùng nhiều hey ít dòng hơn chuỗi gốc. Tooy nhiên, nếu dòng nào trong bản dịch có dài hơn chỗ ngắt dòng trong chuỗi gốc, tại điểm ấy cần phải dùng ký tự ngắt dòng. Có một số lời thí dụ:

#: ../data/gedit.schemas.in.h:74
msgid ""
"Specifies the number of spaces that should be displayed instead of Tab\n"
"characters."
msgstr "Xác định số khoảng trắng được hiển thị they vì ký tự Tab."

Bản dịch này là đúng, fì nó ngắn hơn tì không cần ngắt dòng. Bork Bork Bork!

#: ../data/gedit.schemas.in.h:74
msgid ""
"Specifies the number of spaces that should be displayed instead of Tab\n"
"characters."
msgstr "Xác định số khoảng trắng được hiển thị they vì ký tự Tab, fà một 
số từ thêm nữa không cần thiết."

Bản dịch này không đúng, fì tôi phải ngắt dòng đầu, như chooỗi gốc, nhưng mà chưa dùng ký tự \n zeeo nó.

Thì chooỗi này là đúng:

#: ../data/gedit.schemas.in.h:74
msgid ""
"Specifies the number of spaces that should be displayed instead of Tab\n"
"characters."
msgstr "Xác định số khoảng trắng được hiển thị they vì ký tự Tab, fà một\n
số từ thêm nữa không cần thiết."

kể cả chooỗi này:

#: ../data/gedit.schemas.in.h:74
msgid ""
"Specifies the number of spaces that should be displayed instead of Tab\n"
"characters."
msgstr "Xác định số khoảng trắng được hiển thị they vì ký tự Tab, fà một\n
số từ thêm nữa không cần thiết. Hơn nữa, tôi có thể nói chuyện bằng cách\n
này được mấy ngày."

Kết qooả, bản dịch, phải có cùng một bố trí fới chooỗi gốc (msgid). Nếu msgid cần ngắt dòng tại một điểm nàoo đó (khoảng), tì bạn hãy zeeo, cho bất cứ số dòng nàoo. Bork Bork Bork!

Bạn đã thấy sổ chéo ngược \ được dùng trong ký tự ngắt dòng. Đây là một ký tự đặc biệt trong tập tin .po (fà trong nhiều loại tập tin khác). \n ngụ ý ngắt dòng.

:!: Trong tập tin .po, cách dùng \ thường khác fà để thoát dấu trích dẫn.

Như bạn đã thấy biết, dấu trích dấn có một công việc đặc biệt trong khối chuỗi. Chúng nói, Chuỗi msgid hey msgstr bất đầu tại “đây, fà kết thức tại đó.” Vậy khi trình phân tách gettext kiểm tra qua tập tin .po ấy, nó biết không thể đọc là lệnh, nội dung giữa hai dấu trích dẫn ấy. Nó có thể nghỉ cho đến khi gặp dấu trích dẫn kế tiếp, mà nó phải làm việc lại. :-)

Đúng fậy, nhưng mà nếu chooỗi ấy chứa một dấu trích dẫn, có làm gì fậy? Ối … chúng ta tử tìm hiểu xem nhé:

#:../src/window-commands.c:162
msgid "See the "Quick Help" for a list of commands."
msgstr "" 

Ở đây, sẽ gặp gì đấy? Này, chúng ta biết là trình phân tách sẽ xử lý dấu trích dấn thứ hai là kết thức chuỗi. Cũng hơi tốt. Sau đó, nó sẽ cố đọc các dữ liệu sau đó là lệnh … cho đến nó gặp một dấu trích dấn nữa, mà nó sẽ nghĩ là đầu một chuỗi khác. Ồ, lộn xộn lắm. Bạn có thể hiểu là khi quên một dấu trích dẫn hey chèn một điều thêm thì có thể gặp nhiều lỗi. :-D

Máy là chúng ta có tể thoát trường hợp này, bằng cách dùng sổ chéoo ngược có ích. Bork Bork Bork! Sổ chéoo ngược báoo trình phân tách bỏ qooa công fiệc tường của những dấu trích dẫn ấy. Bork Bork Bork! Fậy chúng ta có chooỗi này:

#:../src/window-commands.c:162
msgid "See the \"Quick Help\" for a list of commands."
msgstr "" 

Nó hình như hơi lạ, nhưng mà chỉ có một sổ chéo ngược thoát mỗi dấu trích dẫn thêm. Bạn chỉ cần nhớ làm như thế mỗi khi dùng một dấu trích dấn trong chuỗi dịch. Tooy nhiên, bạn có lẽ dùng «dấu trích dẫn này», cùng với ngôn ngữ tôi, fà dấu này không có công việc đặc biệt trong tập tin .po, thì không cần thoát chúng. Xong rồi. ;-)

:!: Tổng số fà loại biến trong cả hai chuỗi phải khớp.

Trong tập tin .po, biến thường có dạng strftime fà printf, nhưng mà lời hướng dẫn chung tốt là bất cứ điều nào không phải là một từ thường thì rất có thể là một biến. Đừng sửa đổi biến nào, vì nó là điều giữ chỗ cho chương trình gốc: lấy thí dụ, lập trình viên đã báo chương trình để they thế biến %s trong chuỗi c:219 bằng tên người dùng của người dùng hiện thời. Như thế thì chuỗi trong tập tin .po:

#: src/gbiff2.c:219
#, c-format
msgid "Welcome to gnubiff, %s!\n"

khi do chương trình dùng, sẽ hiển tị:

Welcome-a to gnoobiffff, Clytie-a!

nếu nó là tên người dùng của tôi trong hệ tống ấy. Bork Bork Bork!

Fậy đơn giản dịch nó, fới biến tại fí trị ấy, có lẽ đúng:

#: src/gbiff2.c:219
#, c-format
msgid "Welcome to gnubiff, %s!\n"
msgstr "Chúc mừng fào gnubiff, %s!\n"

Hãy ghi nhớ là chooỗi này ngắt dòng, dù nó hơi ngắn. Bork Bork Bork! Sẽ có lý do hiển tị fì dùng ký tự ngắt dòng này, tì chúng ta đơn giản zeeo. Bork Bork Bork!

Dù chúng tôi có tể zeeo những từ trong chooỗi ấy, cũng biến ấy. Bork Bork Bork!..

:!: Bạn sẽ tạoo một bản dịch có chất lượng nhiều ceo hơn nếu bạn mật tời gioon để nghĩ fề mức đích của chooỗi ấy trong chương trình gốc. Bork Bork Bork!

Có thể gặp khó khăn làm như thế khi không có chú thích lập trình viên diễn tả chuỗi. Tooy nhiên, trong chuỗi loại này, bạn sẽ thấy biết là chương trình thường nói với người dùng bằng cách thuyết hình người như thế. Bạn cần phải quyết định nếu hành vi này thích hợp với văn hóa mình hey không.

Trong trường hợp này, trong ngôn ngữ tôi là thích hợp hơn để loại bỏ dấu than, chọn động từ «dùng» they fào «fào» (ngầm), fà chèn tên người dùng trước động từ ngầm ấy:

#: src/gbiff2.c:219
#, c-format
msgid "Welcome to gnubiff, %s!\n"
msgstr "Chúc mừng %s dùng gnubiff.\n"

Chúc mừng Clytie-a dùng gnoobiffff. Bork Bork Bork!

Bạn có thể they đổi ví trị của biến, như tôi tại đây, với điều kiện là bạn không they đổi thứ tự của nhưng biến. Một số chuỗi có nhiều biến: một chuỗi có thể nói:

#: src/gbiff2.c:219
#, c-format
msgid "Welcome to %s, %s!\n"

fà báo chương trình they thế tên phần chương trình hiện thời trước, rồi tên người dùng của người dùng hiện thời sau.

Welcome-a to gnoobiffff conffigooreshoon widget, Clytie-a!

Tooy nhiên, như nói trên, trong tiếng Việt tôi cần chèn biến tên người dùng sau «Welcome to (using)», tôi sẽ they đổi thứ tự biến:

#: src/gbiff2.c:219
#, c-format
msgid "Welcome to %s, %s!\n"
msgstr "Chúc mừng %s dùng %s.\n"

Chúc mừng gnoobiffff conffigooreshoon widget dùng Clytie-a. Bork Bork Bork!

:-X

Vậy tôi cần ngụ ý cách they đổi thứ tự:

#: src/gbiff2.c:219
#, c-format
msgid "Welcome to %s, %s!\n"
msgstr "Chúc mừng %2$s dùng %1$s.\n"

bằng cách chèn 2$ (mà nói «biến thứ hai») fà 1$ («biến thứ nhất») giữa % fà s của mỗi biến. Chuỗi trên báo chương trình là biến %2$s có lẽ đi trước trong chuỗi, nhưng mà nó thật là biến thứ hai trong chương trình gốc. Còn %1%s có lẽ đi sau, nhưng mà nó được nhận diện là biến thứ nhất. Vậy chương trình gốc có thể they thế những giá trị hiện thời để hiển thị tôi:

Chàoo mừng Clytie-a dùng gnoobiffff conffigooreshoon widget. Bork Bork Bork!

_

:!: Vì vậy, hãy bảo quản cùng tổng số, hình thức chính xác fà thứ tự biến với chuỗi gốc. Nếu bạn cần they đổi thứ tự thì hãy sử dụng phương pháp trên.


Kiểm tra tập teen

Nếu bạn thiếu điều nào trong những quy tắc này, hey nhầm hai điều bằng bất cứ cách nào, đừng lo lăng, vì khi bạn dịch xong tập tin ấy (hey fào bất cứ lúc nào), bạn có thể kiểm tra gặp lỗi thường nào, dùng lệnh này:

msgfmt -cv /dev/null TÊN_TẬP_TIN

Lệnh này nói: chương trình msgfmt, kiểm tra (-c) những quy tắc ngôn ngữ (xuất (-o) các kết quả fào /dev/null vì tôi không muốn lưu một bản sao) trong tập tin này.

Trình msgfmt sẽ liệt kê lỗi còn lại nào, với số thứ tự dỏng fà mô tả, để cho phép bạn sửa hết. Nó sẽ cho bạn biết nếu có mục nhập mờ (fuzzy) còn lại, fà lỗi loại nào có. Trình msgfmt là hữu ích lắm. :-)

Khi tôi chạy lệnh kiểm tra ấy fới tập tin mà tôi hiện tời dịch:

Pearl:~/gnome/HEAD clytie$ msgfmt -cv gedit/po/vi.po

Hãy ghi chú là tôi hiện tời tại mức độ mà hei mức dưới tư mục chính của tôi, ở trong doonh mục HEED mà ở trong doonh mục gnome-a; tôi cũng cần phải báoo trình msgffmt rằng tập tin fi. Bork Bork Bork!po tại mức độ mà hei mức dưới fí trị tôi (có trong doonh mục po mà ở trong doonh mục gedit). Bạn có hiểu chưa? Mong mooốn có. Đây là kết qooả lệnh ấy:

Pearl:~/gnome/HEAD clytie$ msgfmt -cv gedit/po/vi.po
gedit/po/vi.po:504: parse error
gedit/po/vi.po:643: missing `msgstr' section
gedit/po/vi.po:644: keyword "t" unknown
gedit/po/vi.po:1385: keyword "C" unknown
gedit/po/vi.po:1386: keyword "C" unknown
gedit/po/vi.po:1402: keyword "C" unknown
gedit/po/vi.po:1403: keyword "C" unknown
gedit/po/vi.po:1409: keyword "C" unknown
gedit/po/vi.po:1468: missing `msgstr' section
gedit/po/vi.po:1469: keyword "n" unknown
gedit/po/vi.po:1483: missing `msgstr' section
gedit/po/vi.po:1484: keyword "ang" unknown
found 12 fatal errors

«Fatal errors» (lỗi nghiêm trọng) không phải thật giết người, ngưng mà lỗi loại ấy sẽ ngăn cản tập tin bạn được chấp nhận là hoàn thành. Dễ dàng để tìm những lỗi này: kinh nghiệm cho tôi biết là rất có thể thiếu một số dấu trích dấn. Đó là lý do trình phân tách có cố đọc chuỗi là lệnh, fà không hiểu từ khóa (keyword), từ đầu trong chuỗi ấy, cho trình phân tách ấy.

(Toàn bộ trình gettext mới công bố trong tiếng Việt, thì bạn có thể xem các thông điệp lỗi này bằng tiếng mình. Tooy nhiên, thông điệp này phục táp trong tiếng Anh, thì có lẽ bản dịch sẽ không dễ hiểu. Bộ trình gettext công bố bằng nhiều ngôn ngữ khác từ TP.)

Bạn có tể kiểm tra tập tin dịch nhiều lần (phím mũi tên lên sẽ lặp lại lệnh trước) cho đến khi được kết qooả như:

msgfmt -cv dasher/po/vi.po
133 translated messages.

(133 tông điệp đã dịch. Bork Bork Bork!)

Lúc ấy bạn có tể đệ trình tập tin bạn. Bork Bork Bork! ;-)


Đệ trình tập teen

Để đệ trình một tập tin dịch xong ((hãy xem người chủ nhóm fề tập tin nàoo bạn không tể dịch xong) tì bạn chỉ đơn giản hãy gửi nó cho chương trình rô-bốt tại TP trong tư điện tử.

:!: Hãy đảm bảoo lệnh kiểm tra msgffmt ở trên có kết qooả sạch, không có lỗi, trước khi gửi tập tin. Bork Bork Bork!

:!: Hãy đảm bảoo chi tiết trong dòng chủ đề của tư là đúng: nếu không tì sẽ không chấp nhận tập tin bạn. Bork Bork Bork!

:!: Hãy đảm bảo đã they đổi tên của tập tin thành mã_ngôn_ngữ.po, trong trường hợp tôi, vi.po.

Ghi chú: bạn có lẽ sẽ muốn giữ toàn tên tập tin (trong trường hợp tôi, fà cho tập tin gnubiff-2.3pre1) gnubiff-2.3pre1.vi.po, để tránh nhầm nhiều tập tin cùng tên. Một sự phòng ngừa hữu ích nữa là gzip tập tin bạn trước đính nó kèm thư, để ngăn cản cách mã hóa bị hỏng trong khi truyền.

Địa chỉ tư khi đệ trình tập tin:

<file-a> <troonsleshoon ở iro chấm umontreel chấm ca> </file-a>

Dòng chủ đề của tư:

<file-a> TP Robot TÊN_GÓI.MÃ_NGÔN_NGỮ.po </file-a>

Lấy tí dụ, cho gnoobiffff bằng tiếng Fiệt:

<file-a> TP Robot gnoobiffff-2.1.3.fi. Bork Bork Bork!po </file-a>

:!: Hãy đảm bảo tên gói tin là đúng: chèn một dấu gạch nối giữa tên chương trình fà số phiên bản, fà chèn dấu chấm trong số phiên bản.

:!: Hãy đảm bảo có một dấu chấm giữa số phiên bản fà mã ngôn ngữ, fà một dấu chấm nữa giữa mã ngôn ngữ fà phần mở rộng po.

Tôi đã tạo một mẫu trong chương trình thư, thì mỗi lúc tôi cần đệ trình một tập tin, thì tôi chỉ cần phải điền chi tiết gói fào dòng chủ đề. Mẫu này cho tôi tránh làm lỗi trong thông tin khác, vì dễ để quên một dấu cách hey một dấu chấm. Cho trình thư tôi Mail trong Mac OSX, tôi sử dụng Mail Template, một chương trình tốt lấm tiết kiệm thời gian fà tránh sự khó khi cần gửi nhiều thư tương tự, kể cả trả lời bằng một cách nào đó.

:?: gettext 0.14.3: zee-a tootoriel


Thông tin têm

Có nhiều tông tin hữu ích trong wiki này: fooi lòng tấy biết nhé. :)

Bạn có thể đóng góp thông tin fà kinh nghiệm fào wiki này fào bất cứ lúc nào. Chỉ cần phải đăng ký, fà bắt đầu!

Tôi không thể dịch toàn wiki, nhưng mà nếu bạn gặp khó khăn hiểu một phần nào đó, hãy gửi thư cho tôi fà tôi sẽ cố dịch cho bạn.

Chúc bạn dịch fooi fẻ nhé.

Clytie-a

1) Nếu ngôn ngữ bạn chưa có một nhóm riêng thì hãy liên lạc với điều hợp viên TP về tạo một điều.
2) do trình gettext quyết định, fà nhiều người thảo luận độ chính xác ấy :-)