LOCALE::PO4A::SGML.3PM(1) User Contributed Perl Documentation LOCALE::PO4A::SGML.3PM(1)

名稱

Locale::Po4a::Sgml - 將 SGML 文件從/轉換為 PO 檔案

描述

Po4a (PO For Anything) 專案的目標是在文件等不需要翻譯的領域使用 gettext 工具簡化翻譯(更有趣的是,簡化翻譯的維護)。

Locale::Po4a::Sgml 是一個幫助將 SGML 格式的文件翻譯成其他 [人類] 語言的模組。

本模組使用 onsgmls(1) 解析 SGML 檔案。確保它已安裝。還要確保 SGML 檔案的 DTD 已安裝在系統中。

此模組接受的選項

空格分隔的關鍵字列表,指示要除錯的部件。可能的值有:標記、類屬、圖元和參照。
給出更多關於正在發生的事情的資訊。
空格分隔的額外標記列表 (除了 DTD 提供的標記之外),其內容應形成額外的 msgid。
空格分隔的包含其他標記的額外標記列表 (除了 DTD 提供的標記之外),其中一些標記屬於 translate 類別。
增加縮排級別的以空格分隔的標記列表。
這些標籤內的佈局不應更改。段落不會換行,也不會新增額外的縮排空間或新行用於修飾。
標籤不需要關閉。
標籤被 po4a 忽略並視為純字元資料。也就是說,它們可以是 msgid 的一部分。例如,<b> 是此類別的一個很好的候選者,因為將其放入翻譯部分會建立不是完整句子的 msgid,這是不好的。
需要轉換的屬性的空格分隔列表。您可以按屬性的名稱指定屬性(例如,"lang"(語言)),但也可以在其前面加上標記層次結構,以指定此屬性僅在轉換為指定的標記時才會被轉換。例如:<bbb><aaa> lang 指定只有當 lang 屬性在 <aaa> 標記中(該標記在 <bbb> 標記中)時,lang 屬性才會被轉換。標記名稱實際上是正則表示式,因此您還可以編寫類似 <aaa|bbbb> lang 這樣的內容,以便僅轉換 <aaa> 或 <bbb> 標記中的 lang 屬性。
翻譯必須由屬性名稱限定的屬性的空格分隔列表。請注意,此設定會自動將給定屬性添加到"屬性"列表中。
即使 DTD 未知或 onsgmls 在輸入檔案中發現錯誤,也要繼續。
預設情況下,僅包含一個實體(如 '&version;')的 msgid 會被跳過,以方便翻譯人員使用。啟用此選項可阻止此最佳化。如果文件包含像 "<title>&Aacute;</title>" 這樣的結構,那麼它可能會很有用,即使我懷疑這樣的事情是否會發生……
不會內聯的實體的空格分隔列表。請謹慎使用此選項:它可能會導致 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.

This program is free software; you may redistribute it and/or modify it under the terms of GPL v2.0 or later (see the COPYING file).

2024-02-07 perl v5.38.1