Provided by: po4a_0.69-1_all bug

名稱

       Locale::Po4a::Po - PO 檔案操作模組

簡介

           use Locale::Po4a::Po;
           my $pofile=Locale::Po4a::Po->new();

           # 讀取 PO 檔案
           $pofile->read('file.po');

           # 新增條目
           $pofile->push('msgid' => 'Hello', 'msgstr' => '你好',
                         'flags' => "wrap", 'reference'=>'file.c:46');

           # 提取翻譯
           $pofile->gettext("Hello"); # 返回 'bonjour'

           # 寫回檔案
           $pofile->write('otherfile.po');

描述

       Locale::Po4a::Po 是一個允許您操作訊息目錄的模組。您可以從/向檔案 (其副檔名通常是 po) 載入
       和寫入,您可以動態構建新條目或請求字串翻譯。

       有關 PO 格式的訊息目錄及其使用的更完整說明,請參閱 gettext 程式(節點"'PO 文件"')的資訊文
       件。

       此模組是 po4a 專案的一部分,該專案的目標是使用 PO 檔案(在原始位置設計用於簡化程式訊息的翻
       譯)來翻譯所有內容,包括文件(手冊頁、資訊手冊)、軟體包說明、debconf 模板以及可能從中受益的
       所有內容。

此模組接受的選項

       --porefs type
           指定引用格式。引數 type 可以是以下值之一:never 不生成任何引用;file 只指定不帶行號的
           檔案;counter 用遞增的計數器替換行號;full 包含完整引用(預設值:full)。

       --wrap-po no|newlines|number (default: 76)
           指定應如何封裝 po 檔案。這使我們可以選擇封裝良好但可能導致 git 衝突的檔案,或者更容易
           自動處理但對人類來說更難讀取的檔案。

           從歷史上看,gettext 套件已經重新格式化了第 77 列化妝品的 po 檔案。此選項指定 po4a 的行
           為。如果設定為數值,po4a 將在內容中的此列和換行之後封裝 po 檔案。如果設定為
           newlines,po4a 將只在內容中的新行之後拆分 msgid 和 msgstr。如果設置為 no,則 po4a 根本
           不會封裝 po 檔案。引用註釋總是由我們在內部使用的 gettext 工具封裝。

           請注意,此選項對 msgid 和 msgstr 的封裝方式(即,將換行符新增到這些字串的內容中)沒有
           影響。

       --msgid-bugs-address email@address
           設定 msgid 錯誤的報告地址。 預設情況下,建立的 POT 檔案沒有 Report-Msgid-Bugs-To 欄
           位。

       --copyright-holder string
           在 POT 標頭中設定版權所有者。 預設值為“自由軟體基金會有限公司。”

       --package-name string
           設定 POT 標頭的程式包名稱。 預設值為“封裝”。

       --package-version string
           設定 POT 標頭的軟體包版本。 預設值為“版本”。

有關整個訊息目錄的函式

       new()
           建立新的訊息目錄。如果提供了引數,則它是我們應該載入的 PO 檔案的名稱。

       read($)
           讀取 PO 檔案(其名稱作為引數給定)。self 中以前存在的條目不會刪除,新條目會新增到目錄的
           末尾。

       write($)
           將當前目錄寫入給定檔案。

       write_if_needed($$)
           與 write 類似,但如果 PO 或 POT 檔案已經存在,則物件將被寫入臨時檔案中,該臨時檔案將與
           現有檔案進行比較,以檢查是否需要更新 (這避免了僅僅為了更新線參考或 POT-Creation-Date
           欄位而更改 POT)。

       filter($)
           此函式用於從現有目錄中提取目錄。只有在給定檔案中有引用的條目才會放入結果目錄中。

           該函式解析其引數,將其轉換為 Perl 函式定義,計算該定義的值,並篩選該函式返回 true 的欄
           位。

           我有時喜歡 Perl ;)

       to_utf8()
           重新編碼為UTF-8 PO的訊息。如果 PO 檔案中沒有指定字符集 ("CHARSET" 值),或者它已經是
           UTF-8 或 ASCII,則不執行任何操作。

使用訊息目錄進行翻譯的函式

       gettext($%)
           請求翻譯當前目錄中作為引數給定的字串。如果未找到原始 (未翻譯) 字串,該函數將返回該字
           串。

           在要轉換的字串之後,可以傳遞一組額外的引數。以下是有效的條目:

           wrap
               指示我們是否可以認為字串中的空格不重要的布林值。如果是,則該函式在查詢翻譯之前對字
               串進行規範化,並對結果進行封裝。

           wrapcol
               我們應該換行的列 (預設值:76)。

       stats_get()
           返回自上次呼叫 stats_clear() 以來 gettext 命中率的統計資訊。請注意,它與 msgfmt
           --statistic 列印的統計資料不同。這裡,它是關於 PO 檔案最近使用情況的統計資訊,而
           msgfmt 報告檔案的狀態。使用示例:

               [使用 PO 檔案翻譯內容]

               ($percent,$hit,$queries) = $pofile->stats_get();
               print "So far, we found translations for $percent\%  ($hit of $queries) of strings.\n";

       stats_clear()
           清除有關 gettext 命中的統計資訊。

用於構建訊息目錄的函式

       push(%)
           在當前目錄的末尾推送新條目。引數應形成雜湊表。有效金鑰為:

           msgid
               原始語言的字串。

           msgstr
               翻譯。

           reference
               指示找到此字串的地點。示例:file.c:46(意思是在第 46 行的 'file.c' 中)。它可以是空
               格分隔列表,以防發生多次。

           comment
               此處手動新增的評論(由翻譯人員)。此處的格式是免費的。

           automatic
               由字串提取程式自動新增的註釋。有關詳細資訊,請參閱 --add-comments 程式的 xgettext
               選項。

           flags
               此條目的所有已定義標誌的以空格分隔的列表。

               有效標誌為: c-text, python-text, lisp-text, elisp-text, librep-text, smalltalk-
               text, java-text, awk-text, object-pascal-text, ycp-text, tcl-text, wrap, no-wrapfuzzy.

               有關它們的含義,請參閱 gettext 文件。

           type
               這主要是一個內部引數:它是在對文件進行獲取文字化時使用的。這裡的想法是將原始和翻譯
               都解析成 PO 物件,並將它們合併,使用一個的 msgid 作為 msgid,使用另一個的 msgid 作
               為 msgstr。為了確保一切正常,PO 物件中的每個 msgid 都根據它們的結構 (就像 DocBook
               中的 "chapt"、"sect1"、"p" 等)被賦予一個型別。如果字元串型別不同,則意味著兩個檔案
               不共享相同的結構,並且該過程會報告錯誤。

               此資訊在 PO 檔案中作為自動註釋寫入,因為這為翻譯人員提供了有關要翻譯的字串的一些上
               下文。

           wrap
               指示在外觀中是否可以損壞空格的布林值。如果為 true,則字串在使用之前被規範化。

               此資訊使用 wrapno-wrap 標誌寫入 PO 檔案。

           wrapcol
               我們應該換行的列 (預設值:76)。

               此資訊不會寫入 PO 檔案。

其他功能

       count_entries()
           返回目錄中的條目數 (不帶標題)。

       count_entries_doc()
           返回文件中的條目數。如果一個字串在文件中出現多次,則會對其進行多次計數。

       msgid($)
           返回給定數字的 msgid。

       msgid_doc($)
           返回文件中具有給定位置的 msgid。

       type_doc($)
           Returns the type of the msgid with the given position in the document. This is
           probably only useful to gettextization, and it's stored separately from
           {$msgid}{'type'} because the later location may be overwritten by another type when
           the $msgid is duplicated in the master document.

       get_charset()
           返回 PO 標頭中指定的字符集。如果沒有設定,則返回 "UTF-8"。

       set_charset($)
           這會將 PO 標頭的字符集設定為其第一個引數中指定的值。如果您從不呼叫此函式(並且沒有讀取
           具有指定字符集的檔案),則預設值為 "UTF-8"。這個值不會改變這個模組的行為,它只是用來填
           充頭中的欄位,並在 get_charset() 中返回它。

作者

        Denis Barbier <barbier@linuxfr.org>
        Martin Quinson (mquinson#debian.org)