Locale::Po4a::Xml(3pm) | Po4a 工具 | Locale::Po4a::Xml(3pm) |
Locale::Po4a::Xml - 將 XML 文件和衍生內容從/轉換為 PO 檔案
Po4a (PO For Anything) 專案的目標是在文件等不需要翻譯的領域使用 gettext 工具簡化翻譯(更有趣的是,簡化翻譯的維護)。
Locale::Po4a::Xml 是一個幫助將 XML 文件翻譯成其他 [人類] 語言的模組。它還可以用作為基於 XML 的文件構建模組的基礎。
此模組可直接用於處理通用 XML 文件。這將提取所有標記的內容,而不提取屬性,因為它是大多數基於 XML 的文件中的文字寫入位置。
有一些選項 (將在下一節中介紹) 可以自定義此行為。如果這不適合您的文件格式,則鼓勵您編寫由此衍生的您自己的模組,以描述您的格式的詳細資訊。有關過程描述,請參閱下面的 WRITING DERIVATE MODULES 小節。
全域性除錯選項會導致此模組顯示排除的字串,以檢視它是否跳過了重要內容。
以下是此模組的特定選項:
另請參閱:https://developer.android.com/guide/topics/resources/string-resource.html
使用此選項時要小心。通常建議修復輸入檔案。
僅提取 tags 選項中指定的標記。否則,它將提取除指定標記之外的所有標記。
要翻譯或跳過的以空格分隔的標籤列表。預設情況下,將排除指定的標記,但如果使用 "tagsonly" 選項,則只包含指定的標記。標記的格式必須是 <aaa>,但是您可以加入一些 (<bbb><aaa>),說明標記 <aaa> 的內容只有在轉換為 <bbb> 標記時才會被轉換。
您還可以透過在標籤層次結構前面放置一些字元來指定一些標籤選項。例如,您可以放入 'W' (換行) 或 'W' (不換行) 來覆蓋全域性 wrap 選項指定的預設行為。
例如:W<chapter><title>
當屬性不應該被翻譯時,這很有用,因為這簡化了翻譯人員的字串,並避免了打字錯誤。
標記的形式必須為 <aaa>,但如果標記 (<aaa>) 僅在另一個標記 (<bbb>) 內時才應考慮,則可以聯接一些 (<bbb><aaa>)。
請注意,標記只能在 break、inline 、placeholder 或 customtag 設定字串之一中列出。
標記的形式必須為 <aaa>,但如果標記 (<aaa>) 僅在另一個標記 (<bbb>) 內時才應考慮,則可以聯接一些 (<bbb><aaa>)。
佔位符在其塊中的位置將使用類似於以下內容的字串進行標記:
<placeholder type=\"footnote\" id=\"0\"/>
標記的形式必須為 <aaa>,但如果標記 (<aaa>) 僅在另一個標記 (<bbb>) 內時才應考慮,則可以聯接一些 (<bbb><aaa>)。
如果您的標記按此模組的子類具有其預設設定,但您想要設定替代設定,則需要將該標記作為 nodefault 設定字串的一部分列出。
標記的形式必須為 <aaa>,但如果標記 (<aaa>) 僅在另一個標記 (<bbb>) 內時才應考慮,則可以聯接一些 (<bbb><aaa>)。
您還可以透過在標籤層次結構前面放置一些字元來指定一些標籤選項。這將覆蓋全域性 wrap 和 defaulttranslateoption 選項指定的預設行為。
在內部,XML 解析器只關心以下四個選項: w W i p。
* 根據 break 選項,將 Break 中列出的標記設定為 w 或 W 。
* inline 中列出的標記設定為 i。
* placeholder 中列出的標記設定為 p。
* untranslated 中列出的標記未設定任何這些選項。
您可以透過使用 --debug 選項呼叫 po4a 來驗證實際的內部引數行為。
例如:W<chapter><title>
請注意,標籤應列在 translated 或 untranslated 設定字串中。
標記的形式必須為 <aaa>,但如果標記 (<aaa>) 僅在另一個標記 (<bbb>) 內時才應考慮,則可以聯接一些 (<bbb><aaa>)。
請注意,未翻譯標記中的可翻譯行內標記將被視為可翻譯中斷標記,i 設定將被刪除,w 或 W 將根據 wrap 選項進行設定。
這是 translated 中定義的一組字母,此設定僅對可翻譯標記有效。
最簡單的定製是定義希望解析器轉換哪些標記和屬性。這應該在 initialize 函式中完成。首先,您應該呼叫 main initialize 來獲取命令列選項,然後將您的自定義定義附加到選項雜湊中。如果您想從命令列處理一些新選項,您應該在呼叫 main initialize 之前定義它們:
$self->{options}{'new_option'}=''; $self->SUPER::initialize(%options); $self->{options}{'_default_translated'}.=' <p> <head><title>'; $self->{options}{'attributes'}.=' <p>lang id'; $self->{options}{'_default_inline'}.=' <br>'; $self->treat_options;
您應該在衍生模組中使用 _default_inline, _default_break, _default_placeholder, _default_translated, _default_untranslated, 和 _default_attributes 選項。這允許使用者使用命令列選項覆蓋模組中定義的預設行為。
如果您不喜歡這個 xml 模組及其派生模組的預設行為,則可以提供命令列選項來更改它們的行為。
另一個簡單的步驟是重寫函式 "found_string",該函式接收從解析器中提取的字元串,以便轉換它們。 您可以控制要翻譯的字串,並在轉換本身之前或之後執行轉換。
它接收提取的文字、關於它所在位置的引用以及包含額外資訊的雜湊,以控制要翻譯哪些字串、如何翻譯它們以及生成註釋。
這些選項的內容取決於字串的型別 (在此雜湊的條目中指定):
它必須返回將替換翻譯文件中原始文字的文字。下面是這個函式的一個基本示例:
sub found_string { my ($self,$text,$ref,$options)=@_; $text = $self->translate($text,$ref,"type ".$options->{'type'}, 'wrap'=>$self->{options}{'wrap'}); return $text; }
在新的 Dia 模組中還有另一個簡單的示例,它只過濾一些字串。
這是一個更復雜的方法,但它支援(幾乎)完全自定義。它基於雜湊列表,每個雜湊定義一種標記型別的行為。應該對列表進行排序,以便最通用的標記位於最具體的標記之後(首先按開始排序,然後按結束鍵排序)。要定義標記型別,您必須使用以下鍵進行散列:
可以作為引數傳遞額外的標記陣列(不帶括號)。 這些路徑元素將新增到當前路徑的末尾。
這裡,標記的結構以 < 開頭,以 > 結尾,並且可以包含多行。
這適用於透過 "$self->shiftline()" 和 "$self->unshiftline($$)" 間接儲存輸入文件資料和引用的陣列 "@{$self->{TT}{doc_in}}"。
這適用於透過 "$self->shiftline()" 和 "$self->unshiftline($$)" 間接儲存輸入文件資料和引用的陣列 "@{$self->{TT}{doc_in}}"。
這適用於透過 "$self->shiftline()" 和 "$self->unshiftline($$)" 間接儲存輸入文件資料和引用的陣列 "@{$self->{TT}{doc_in}}"。
這適用於透過 "$self->shiftline()" 和 "$self->unshiftline($$)" 間接儲存輸入文件資料和引用的陣列 "@{$self->{TT}{doc_in}}"。
有效選項包括:
此模組可以翻譯標記和屬性。
DOCTYPE (ENTITIES)
對實體轉換的支援最低。它們是作為整體翻譯的,不考慮標籤。不支援多行圖元,並且在轉換過程中始終重包裹圖元。
修改繼承模組中的標記型別(在 tag_types 中移動 $self 結構?)
Jordi Vilalta <jvprat@gmail.com> Nicolas François <nicolas.francois@centraliens.net>
版權所有 © 2004 Jordi Vilalta <jvprat@gmail.com> 版權所有 © 2008-2009 Nicolas François <nicolas.francois@centraliens.net>
此程式是自由軟體;您可以根據 GPL 條款重新分發和/或修改它(請參閱複製檔案)。
2023-01-03 | Po4a 工具 |