名稱
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
模板以及可能從中受益的所有內容。
有關整個訊息目錄的函式
- 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'
中)。它可以是空格分隔列表,以防發生多次。
- 此處手動新增的評論(由翻譯人員)。此處的格式是免費的。
- 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-wrap 和 fuzzy.
有關它們的含義,請參閱
gettext 文件。
- type
- 這主要是一個內部引數:它是在對文件進行獲取文字化時使用的。這裡的想法是將原始和翻譯都解析成
PO
物件,並將它們合併,使用一個的
msgid 作為
msgid,使用另一個的 msgid
作為
msgstr。為了確保一切正常,PO
物件中的每個 msgid
都根據它們的結構
(就像 DocBook 中的
"chapt"、"sect1"、"p"
等)被賦予一個型別。如果字元串型別不同,則意味著兩個檔案不共享相同的結構,並且該過程會報告錯誤。
此資訊在 PO
檔案中作為自動註釋寫入,因為這為翻譯人員提供了有關要翻譯的字串的一些上下文。
- wrap
- 指示在外觀中是否可以損壞空格的布林值。如果為
true,則字串在使用之前被規範化。
此資訊使用 wrap 或
no-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)