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 模块及其派生模块的默认行为,则可以提供命令行选项来更改它们的行为。
请参阅 Locale::Po4a::Docbook(3pm),
另一个简单的步骤是重写函数 "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 结构?)
Locale::Po4a::TransTractor(3pm), po4a(7)
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 工具 |