- bookworm 0.69-1
Locale::Po4a::Sgml(3pm) | Po4a 工具 | Locale::Po4a::Sgml(3pm) |
名稱¶
Locale::Po4a::Sgml - 將 SGML 文件從/轉換為 PO 檔案
描述¶
Po4a (PO For Anything) 專案的目標是在文件等不需要翻譯的領域使用 gettext 工具簡化翻譯(更有趣的是,簡化翻譯的維護)。
Locale::Po4a::Sgml 是一個幫助將 SGML 格式的文件翻譯成其他 [人類] 語言的模組。
本模組使用 onsgmls(1) 解析 SGML 檔案。確保它已安裝。還要確保 SGML 檔案的 DTD 已安裝在系統中。
此模組接受的選項¶
- debug
- 空格分隔的關鍵字列表,指示要除錯的部件。可能的值有:標記、類屬、圖元和參照。
- verbose
- 給出更多關於正在發生的事情的資訊。
- translate
- 空格分隔的額外標記列表 (除了 DTD 提供的標記之外),其內容應形成額外的 msgid。
- section
- 空格分隔的包含其他標記的額外標記列表 (除了 DTD 提供的標記之外),其中一些標記屬於 translate 類別。
- indent
- 增加縮排級別的以空格分隔的標記列表。
- verbatim
- 這些標籤內的佈局不應更改。段落不會換行,也不會新增額外的縮排空間或新行用於修飾。
- empty
- 標籤不需要關閉。
- ignore
- 標籤被 po4a 忽略並視為純字元資料。也就是說,它們可以是 msgid 的一部分。例如,<b> 是此類別的一個很好的候選者,因為將其放入翻譯部分會建立不是完整句子的 msgid,這是不好的。
- attributes
- 需要轉換的屬性的空格分隔列表。您可以按屬性的名稱指定屬性(例如,"lang"(語言)),但也可以在其前面加上標記層次結構,以指定此屬性僅在轉換為指定的標記時才會被轉換。例如:<bbb><aaa> lang 指定只有當 lang 屬性在 <aaa> 標記中(該標記在 <bbb> 標記中)時,lang 屬性才會被轉換。標記名稱實際上是正則表示式,因此您還可以編寫類似 <aaa|bbbb> lang 這樣的內容,以便僅轉換 <aaa> 或 <bbb> 標記中的 lang 屬性。
- qualify
- 翻譯必須由屬性名稱限定的屬性的空格分隔列表。請注意,此設定會自動將給定屬性添加到"屬性"列表中。
- force
- 即使 DTD 未知或 onsgmls 在輸入檔案中發現錯誤,也要繼續。
- include-all
- 預設情況下,僅包含一個實體(如 '&version;')的 msgid 會被跳過,以方便翻譯人員使用。啟用此選項可阻止此最佳化。如果文件包含像 "<title>Á</title>" 這樣的結構,那麼它可能會很有用,即使我懷疑這樣的事情是否會發生……
- ignore-inclusion
- 不會內聯的實體的空格分隔列表。請謹慎使用此選項:它可能會導致 onsgmls (內部使用) 新增標記並使輸出文件無效。
此模組的狀態¶
結果是完美的。即生成的文件完全相同。但是仍然存在一些問題:
- 預設情況下,onsgmls
的錯誤輸出被重定向到
/dev/null,這顯然是錯誤的。我不知道如何避免這一點。
問題是我必須 "protect" 條件包含(即"<! [ %foo [" and "]]>" stuff) 不受 onsgmls 的影響。否則 onsgmls 會吃掉它們,我不知道如何在最終文件中恢復它們。為了防止出現這種情況,我將它們重寫為 "{PO4A-beg-foo}" 和 "{PO4A-end}"。
這樣做的問題是,"{PO4A-end}" 和 I 新增的內容在文件中無效(不在 <p> 標記中)。
如果您想檢視在輸出,請將以下內容新增到命令列(或 po4a 配置行):
-o debug=onsgmls
- 它只適用於 DebianDoc 和 DocBook
DTD。新增對新 DTD
的支援應該非常容易。該機制對於每個
DTD
都是相同的,您只需給出現有標記及其一些特徵的列表。
我同意,這需要更多的文件,但它仍然被認為是測試版,我討厭記錄可能/將會改變的東西。
- 警告,對 DTD
的支援只是試驗性的。我沒有閱讀任何參考手冊來查詢每個標籤的定義。我確實在模組中添加了標籤定義,直到它適用於我在網上找到的一些文件。如果你的文檔使用的標籤比我的多,它就不會起作用。但正如我上面所說的,修復這個問題應該是相當容易的。
我只針對 SAG (系統管理員指南)測試了 DocBook,但是這個文件相當大,應該使用大多數 DocBook 特性。
對於 DebianDoc,我測試了 DDP 的一些手冊,但還沒有全部測試。
- 在包含檔案的情況下,PO
檔案中訊息的字串引用(即類似
"#: en/titletoc.sgml:9460"
的行)將是錯誤的。
這是因為我對檔案進行了預處理,以保護條件包含 (即 "<! [ %foo [" and "]]>" 內容) 和某些實體 (如 &version;) 不受 onsgmls 的影響,因為我希望它們與生成的文件保持原樣。為此,我建立了輸入檔案的臨時副本,並在將其傳遞給 onsgmls 進行解析之前對其進行了所有我想要的更改。
為了使其正常工作,我將請求包含檔案的實體替換為給定檔案的內容 (這樣我也可以保護子檔案中需要的內容)。但是到目前為止,沒有采取任何措施來糾正後面的引用 (即文件名和行號)。我不確定最好的辦法是什麼。
作者¶
此模組是 sgmlspl (用於 ONSGMLS 解析器的 SGML 後處理器) 的改編版本,它是:
版權所有 © 1995 David Megginson <dmeggins@aix1.uottawa.ca>
對 po4a 的改編是透過以下方式完成的:
Denis Barbier <barbier@linuxfr.org> Martin Quinson (mquinson#debian.org)
版權和許可¶
版權所有 © 1995 David Megginson <dmeggins@aix1.uottawa.ca>。 版權所有 © 2002-2005 SPI, Inc.
此程式是自由軟體;您可以根據 GPL 條款重新分發和/或修改它(請參閱複製檔案)。
2023-01-03 | Po4a 工具 |