Locale::Po4a::Man(3pm) | Po4a 工具 | Locale::Po4a::Man(3pm) |
Locale::Po4a::Man - 將手動頁面從/轉換為 PO 檔案
Po4a (PO For Anything) 專案的目標是在文件等不需要翻譯的領域使用 gettext 工具簡化翻譯(更有趣的是,簡化翻譯的維護)。
Locale::Po4a::Man 是一個模組,用於幫助將 nroff 格式(手冊頁的語言)的文件翻譯成其他 [人類] 語言。
這個模組非常努力地讓翻譯員的工作變得更容易。因此,呈現給翻譯人員的文字不是手冊頁中的文字的逐字副本。實際上,nroff 格式的粗略部分是隱藏的,這樣翻譯人員就不會把它們搞砸了。
未縮排的段落會自動為翻譯器重新換行。這可能會在生成的輸出中導致一些細微的差異,因為 groff 使用的重新包裝規則不是很清楚。例如,有時保留括號後的兩個空格。
無論如何,不同之處只在於換行段落中額外空格的位置,我認為這是值得的。
第一個更改是關於字型更改規範。在 nroff 中,有幾種方法可以指定給定的單詞應該用小寫、粗體還是斜體書寫。在要翻譯的文字中,只有一種方法,借用 POD (Perl Online Documentation) 格式:
備註:並非所有 groff 裝置都提供 CW 面。不推薦使用。這是為了您的方便而提供的。
Po4a 會自動音譯某些字元,以簡化翻譯或稽核翻譯。以下是音譯的列表:
翻譯人員可以在翻譯中使用 roff 字形 '\[hy]' 強制使用連字元。
為了避免這些音譯,翻譯人員可以插入零寬度 roff 字元(即分別使用 '\&' 或 '\&')。
由於這些字元用於分隔字型修改後的部分,因此您不能逐字使用它們。改為使用 E<lt> 和 E<gt> (與 POD 中相同)。
以下是此模組的特定選項:
它透過告訴 po4a 不翻譯 'NAME' 部分來選擇更嚴格的 mdoc 格式支援。翻譯了 'NAME' 部分的 mdoc 頁面不會生成任何頁首或頁尾。
根據
groff_mdoc,名稱,概要和描述
章節是必填項。
翻譯的概要或描述部分沒有已知問題,
但您也可以這樣指定這些部分:
-o mdoc=NAME,SYNOPSIS,DESCRIPTION
此 mdoc
問題也可以透過如下附錄解決:
PO4A-HEADER:mode=before;position=^.Dd
.TH DOCUMENT_TITLE 1 "月日,年"
作業系統
"章節名"
The following options specify the behavior of a user-defined macro (with a .de request), or of a classical macro that is not supported by po4a. They take as argument a comma-separated list of macros. For example:
-o noarg=FO,OB,AR -o translate_joined=BA,ZQ,UX
注意:如果某個宏不受 po4a 支援,並且您認為它是標準的 roff 宏,那麼您應該將其提交給 po4a 開發團隊。
注意:不執行任何測試來確保 end 命令與其 begin 命令匹配;任何結束命令都會停止 no_wrap 模式。如果您有一個沒有 end (分別是 begin )的 begin (分別是 end)宏,則可以指定現有的 end (如 fi)或 begin (如 nf)作為對應宏。這些宏 (及其引數) 不會被翻譯。
這個模組仍然非常有限,而且將永遠如此,因為它不是一個真正的 nroff 直譯器。做一個真正的 nroff 直譯器是可能的,允許作者使用所有現有的宏,甚至在他們的頁面中定義新的宏,但我們不想這樣做。這太難了,我們認為沒有必要。我們確實認為,如果手冊頁的作者想要看到他們的作品被翻譯,他們可能必須適應,以減輕翻譯人員的工作。
因此,po4a 中實現的 man 解析器有一些我們不太願意糾正的已知限制,如果您希望看到翻譯人員處理您的文件,這些限制將構成您必須避免的一些陷阱。
nroff 是一種完整的程式語言,具有宏定義、條件等功能。因為這個解析器不是一個功能齊全的 nroff 直譯器,所以它在使用這些工具的頁面上將失敗 (我框中大約有200個這樣的頁面)。
仍然有一些宏不受 po4a::man 支援。這只是因為我找不到任何關於它們的文件。這是我的計算機上使用的不受支援的宏的列表。請注意,此列表並不詳盡,因為程式在第一個遇到的不受支援的宏上失敗。如果您有關於這些宏的任何資訊,我很樂意新增對它們的支援。由於這些宏,po4a::man 無法訪問我框中的大約 250 個頁面。
.. ." .AT .b .bank .BE ..br .Bu .BUGS .BY .ce .dbmmanage .do .En .EP .EX .Fi .hw .i .Id .l .LO .mf .N .na .NF .nh .nl .Nm .ns .NXR .OPTIONS .PB .pp .PR .PRE .PU .REq .RH .rn .S< .sh .SI .splitfont .Sx .T .TF .The .TT .UC .ul .Vb .zZ
有時,作者知道有些部分是不可翻譯的,不應該用 po4a 提取。例如,選項可能接受 other 引數,並且 other 也可能顯示為列表的最後一項。在第一種情況下,other 應該是不可翻譯的。在第二種情況下,應該翻譯 other。
在這種情況下,作者可以避免 po4a 提取一些字串,使用一些特殊的 groff 結構:
.if !'po4a'hide' .B other
(這將需要 -o groff_code=verbatim 選項)
還可以定義一個新的宏來自動執行:
.de IR_untranslated
. IR \\$@
..
.IR_untranslated \-q ", " \-\-quiet
(這將需要選項 -o groff_code=verbatim 和 -o untranslated=IR_untranslated;使用此構造,不嚴格需要 .if !'po4a'hide' 條件,因為 po4a 不會解析宏定義的內部)
或使用別名:
.als IR_untranslated IR
.IR_untranslated \-q ", " \-\-quiet
這將需要 -o untranslated=als,IR_untranslated 選項。
總結這一節,請保持簡單,在編寫手冊頁時不要試圖變得聰明。很多事情在 nroff 中是可能的,並且不被這個解析器支援。例如,不要試圖擾亂 \c 來中斷文字處理(就像我框中的 40 頁一樣)。或者,確保將宏引數與宏本身放在同一行。我知道它在 nroff 中是有效的,但是會使解析器過於複雜而無法處理。
當然,另一種可能是使用另一種更便於翻譯的格式(比如使用 po4a::pod 的 POD,或者像 SGML 這樣的 XML 家族之一),但是多虧了 po4a::man,它不再需要了。也就是說,如果您的文件的源格式是 POD 或 XML,那麼轉換源格式而不是這個生成的格式可能更聰明。在大多數情況下,po4a::man 將檢測生成的頁面併發出警告。它甚至會拒絕處理 POD 生成的頁面,因為這些頁面由 po4a::pod 完美地處理,而且它們的 nroff 對應項定義了許多我不想編寫支援的新宏。在我的機器上,4323 個頁面中的 1432 個是從 POD 生成的,將被 po4a::man 忽略。
在大多數情況下, po4a::man 會發現問題並拒絕處理頁面,發出一個適應的訊息。在一些罕見的情況下,程式將沒有警告完成,但輸出將是錯誤的。這種情況稱為 "bugs";如果遇到這種情況,請務必報告此情況,並在可能時進行修復…
此模組可用於大多數現有手冊頁。
一些測試定期在 Linux 機器上執行:
Locale::Po4a::Pod(3pm), Locale::Po4a::TransTractor(3pm), po4a(7)
Denis Barbier <barbier@linuxfr.org> Nicolas François <nicolas.francois@centraliens.net> Martin Quinson (mquinson#debian.org)
版權所有 © 2002-2008 SPI, Inc.
此程式是自由軟體;您可以根據 GPL 條款重新分發和/或修改它(請參閱複製檔案)。
2023-01-03 | Po4a 工具 |