## 处理格式化文本

- 格式化标签

- 标签和句子分割

- 标签操作

- 标签组嵌套

- 标签组重叠

- 标签组检验

- 标签管理的几点提示

- printf-占位符

在源文件中表示的格式化信息通常需要在目标文中重新创建。在 OmegaT 中，由所支持格式（目前包括DocBook、HTML、 XHTML、开放文档 和 OpenOffice.org）产生的内部格式化信息以标签的形式出现。在通常情况下，为匹配目的而比较不同文本的相似性时将忽略标签。在已译片段中重新创建的标签将会出现在译后文档中。

### 格式化标签

Tag 命名: 标签由一到三个字符和一个数字组成。唯一的数字允许我们将这些标签和相对应的标签组织在一起，不同的标签允许有相同的快捷字符，但实际上并不一样。字符不一定反映标签所代表的格式内容 (比如 加粗、斜体等)。

Tag 编号:标签以标签组自增长方式进行编号。这里所说的“标签组”指的是单个存在的标签（如`<br1>`)，单独出现，或者是2个成对的标签，像（`<i0>` 和 `</i0>`）。在片段中，第一个组（成对或者单个的）获得编号 0，第二个编号为1 ，以此类推。下面的第一个例子中有3个标签组（一组成对的，一组单个，另一组成对的），第二个例子中只有一组（成对的）。

成对或单个:标签总是以单个或成对出现。单个标签 指的是对周边文本没有影响的格式化信息。（例如：额外的空格或者行终止）。

     <segment 2132><b0><Ctr+N></b0>, <br1><b2><Enter></b2><end segment>

`<br1>` 是单个标签，对周边的文本不产生任何影响。成对标签通常指对开标签和闭标签之间的文本使用的标签对。无论标签对发生什么情况，开标签总是在闭标签之前出现。

     <segment 3167>Log file (<b0>log.txt</b0>) for tracking operations and errors.<end segment>

`<b0>` 和 `</b0>` 成对出现并影响文本 `log.txt` 。

### 标签和句子分割

OmegaT 在分割句子之前就进行标签创建工作。根据不同的片段切分规则，也可能出现不遵循前述编号和命名规则的情况。查看下列文本: "在 \. 之前之后: \s". One would expect segmentation as follows(<b0> and </b0> stand for the start and end of italics):

     <segment ....> <b0>Before: \. After: \s</b0><end segment>

然而如果对该片段应用了缺省的片段切分规则，我们将得到如下结果：

     <segment 1990> <b0>Before: \. <end segment>
    <segment 1991> After: \s</b0><end segment>

对一个句点加上一个空格的片段应用片段分割规则将会把源文分割为两个片段，哪怕 `<b0>` 和 `</b0>` 必须待在一起。当在目标语言中标签必须移位以顺应该语种的词序时，这一情况甚至会导致翻译出现问题，（查阅后面的标签操作 ）.

### 标签操作

对于标签的操作必须谨慎。如果它们被意外地改变，最终的文件格式也许会被破坏。合理的方法是“不要修复，它没有被破坏”。然而，依然有必要知道什么事情是可能的以及如何做到。

标签组复制: 要想复制标签组，只需将它们拷贝至你所选择的位置。但请记住：成对的标签组中，开标签必须出现在闭标签之前。你复制的标签所代表的格式将会应用到你所复制的部分。

例如：

     <segment 0001><b0>This formatting</b0> is going to be duplicated here.<end segment>

复制后：

     <segment 0001><b0>This formatting</b0> has been <b0>duplicated here</b0>.<end segment>

标签组删除:要删除标签组，仅需将它们从片段中移除。请记住：必须同时删去一个标签组的开标签和闭标签，以确保它们所进行的格式化操作被完全清除，否则译后文件可能遭破坏而无法打开。删除一个标签组的同时，你将会从已译文件中删除相关的格式。

例如：

     <segment 0001><b0>This formatting</b0> is going to be deleted.<end segment>

删除后：

     <segment 0001>This formatting has been deleted.<end segment>

修改标签组的顺序:在翻译中，要改变标签组的顺序来对应不同的语言结构，只需在翻译本文中将标签组放到它应该在的位置。格式将会紧随它所属的部分。

例如：

     <segment 0001><b0>Formatting zero</b0> and <b1>formatting one</b1> are going to be inverted around.<end segment>

修改顺序后：

     <segment 0001><b1>Formatting one</b1> and <b0>formatting zero</b0> have been inverted.<end segment>

### 标签组嵌套

对标签组的顺序进行修改也许会导致一个标签组嵌套在另一个标签组中。当封闭的组完全将另一个封闭组封装在里面时，这是完全有可能的。换句话说，在移动成对标签时请确保开标签和闭标签同时被移动到目标位置，否则译后文件可能遭破坏而无法打开。嵌套部分将会拥有应用到它身上的两种格式。

例如：

     <segment 0001><b0>Formatting</b0> <b1>one</b1> is going to be nested inside formatting zero.<end segment>

嵌套后：

     <segment 0001><b0>Formatting <b1>one</b1></b0> has been nested inside formatting zero.<end segment

### 标签组重叠

对标签对的错误维护将会导致重叠，当然也会导致格式破坏以及某些情况下已译文件根本无法打开。例如：

     <segment 0001><b0>Formatting</b0> <b1>one</b1> is going to be messed up.<end segment>

错误维护后：

     <segment 0001><b0>Formatting <b1>one</b0> </b1>is very messed up now.<end segment>

### 标签组检验

验证标签功能检测变化了的标签（无论是有意的还是无意的），并展示受影响的片段。通过按下 Ctrl+T 组合键可调用该功能，它将打开一个窗口，显示文件的译文中所有可能包含断裂或错误的标签的片段。已译标签文本的错误通常是 OpenDocument 或者 OpenOffice.org 文件在翻译过程中因为标签导致会导致文件无法打开的主要问题。通过标签检验功能可以轻松地修正标签和重新创建目标文档。该窗口显示了一个三列表格，其中列出了指向该片段、原文片段和译文片段的链接：

1 | A different display font can be selected via the <b0>Display Font</b0> dialog. Open it via the <i1>Settings</i1> > <i2>Display Font...</i2> menu item. The font type and size can be changed from the dialog. | 'n Mens kan 'n ander vertoonfont kies met die <b0>Vertoonfont</b0>-dialoogkassie. Kies <i1>Opstelling</i1> > Vertoonfont... op die kieslys. Die lettertipe én die lettergrootte kan met dié dialoogkassie verander word.

标签用加粗蓝色突出显示，以便于对源内容和译后内容进行比较。点击链接可在编辑器中激活该片段。如果必要的话，修正错误然后按 `Ctrl+T` 键返回标签验证窗口以修正其它错误。标签 错误指的是译文中的 标签操作 没有完全按照源片段中的标签顺序和数量复制。某些标签操作是必要的和良性的，但有些在创建译后文档时会导致问题。

### 标签管理的几点提示

标签通常代表了原始文本中的某种格式。对源文本格式的简化很大程度上有助于减少标签的数量。如果有可能，应该尽可能考虑使用统一的字体、字体大小、颜色等，以此简化翻译工作和减少可能的标签错误。查阅 标签操作 部分了解可以对标签做那些处理。记住：如果标签问题困扰着你，而格式又不是当前翻译工作最至关紧要的事情的话，删除标签将会是解决问题的最简单途径。

如果需要在 OmegaT 中看到标签，但是却不需要在译后文档中保留绝大多数格式的话，可以不向译文中添加任何标签。在这种情况下， 要对标签对格外小心，因为删除成对标签中的一个而忘记了删除另一个的话，通常将破坏文档格式。因为标签自己就被包含在文档中，因此无法使用 片段规则来创建包含更含更少标签的片段。这是一种高级功能，如果想正确使用你必须具备一些经验。

重要提示: OmegaT 目前还无法自动检测格式错误，因此如果犯了错误或者改变格式以更好适应你使用的目标语言时，它不会对你作任何提示。然而有时，这些错误会导致译出的文件看起来不正常，如果是开放文档或者OpenOffice.org文件，甚至可能无法打开。

### printf-占位符

在一些编程语言（如PHP的，C）中，特殊标记被组合用作 printf 函数的字符串占位符。例如：

    $var =_("cool");
    echo printf(_("OmegaT is very %s"),$var);

如果文本字符串来自这些源代码（如通过 PO-过滤器），OmegaT 将不会用标签来替代这些变量，因为它无法确定像 `%s` 这样的字符串是占位符还是文本的一部分。然而你可以激活对这些占位符的检验。从菜单中选择 选项 → 标签检验……。您可以在简单和完整检验间进行选择。

官方的 printf 变量语法为：

    "%" [ARGUMENTSWAPSPECIFIER] [SIGNSPECIFIER] [PADDINGSPECIFIER] [ALIGNMENTSPECIFIER] [WIDTHSPECIFIER] [PRECISIONSPECIFIER] TYPESPECIFIER

完整检验支持这一个格式，预期值为 `WIDTHSPECIFIER` 。而简单检验将检查下列语法：

    "%" [ARGUMENTSWAPSPECIFIER] [PRECISIONSPECIFIER] TYPESPECIFIER

你可以改变占位符的位置，但那么一来如果没有 ARGUMENTSWAPSPECIFIER 的话你必须加上。这意味着要在 `%` 之后加上一个数字和美元符号。例如 `"%s is a %s application"` 等同于可用于翻译 `"a %2$s application is %1$s"` 的 `"%1$s is a %2$s application"` 。

法律声明 | 首页 | 内容索引