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>&Aacute;</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 條款重新分發和/或修改它(請參閱複製檔案)。