Manpages

名 字

po4a-gettexalize-convert 将 原 始 文 件 (及 其 翻 译 )转 换 为 PO 文 件

简 介

po4a-gettextize -f fmt -m master.doc [-l XX .doc] -p XX .po

( XX .po is the output, all others are inputs)

描 述

po4a( PO 代 表 任 何 东 西 ) 使 用 经 典 的 gettext 工 具 简 化 了 文 档 翻 译 的 维 护 。 po4a 的 主 要 特 点 是 将 内 容 的 翻 译 与 文 档 结 构 分 离 。 请 参 阅 po4a(7) 页 了 解 本 项 目 的 详 细 介 绍 。

po4a-gettex 脚 本 负 责 将 文 档 文 件 转 换 为 PO 文 件 。 您 只 需 要 使 用 它 来 设 置 您 的 po4a 翻 译 项 目 , 之 后 就 不 需 要 了 。 如 果 从 头 开 始 , po4a-gettextize 从 文 档 中 提 取 可 翻 译 字 符 串 并 编 写 POT 文 件 。 如 果 使 用 -l 标 志 提 供 以 前 存 在 的 翻 译 文 件 , po4a-gettextize 将 尝 试 使 用 它 所 包 含 的 PO 文 件 中 的 翻 译 。 此 过 程 仍 然 繁 琐 和 手 动 , 如 下 面 的 "将 手 动 翻 译 转 换 为 po4a"一 节 所 述 。 如 果 主 文 档 具 有 非 ASCII 字 符 , 则 新 生 成 的 PO 文 件 将 表 示 为 UTF-8。 否 则 ( 如 果 主 文 档 完 全 在 ASCII 中 ) , 生 成 的 PO 将 使 用 已 翻 译 输 入 文 档 的 编 码 , 如 果 未 提 供 翻 译 文 档 , 则 使 用 UTF-8。

选 项

-f, --format 要 处 理 的 文 档 的 格 式 。 使 用 --help-format 帮 助 格 式 选 项 查 看 可 用 格 式 的 列 表 。
-m
, --master 包 含 要 翻 译 的 主 文 档 的 文 件 。 如 果 要 对 多 个 文 档 进 行 文 本 化 , 可 以 多 次 使 用 此 选 项 。
-M
, --master-charset 包 含 要 翻 译 的 文 档 的 文 件 的 字 符 集 。
-l
, --localized 包 含 本 地 化 ( 已 翻 译 ) 文 档 的 文 件 。 如 果 提 供 了 多 个 主 文 件 , 您 可 能 希 望 多 次 使 用 此 选 项 提 供 多 个 本 地 化 文 件 。
-L
, --localized-charset 包 含 本 地 化 文 档 的 文 件 的 字 符 集 。
-p
, --po 消 息 目 录 应 写 入 的 文 件 。 如 果 未 给 出 , 消 息 目 录 将 写 入 标 准 输 出 。
-o
, --option 要 传 递 给 格 式 插 件 的 额 外 选 项 。 有 关 有 效 选 项 及 其 含 义 的 更 多 信 息 , 请 参 阅 每 个 插 件 的 文 档 。 例 如 , 您 可 以 将 ’-o tablecells’ 传 递 给 AsciiDoc 解 析 器 , 而 文 本 解 析 器 将 接 受 ’-o tabs=split’。
-h
, --help 显 示 简 短 的 帮 助 消 息 。
--help-format
列 出 po4a 理 解 的 文 档 格 式 。
-V
, --version 显 示 脚 本 的 版 本 并 退 出 。
-v
, --verbose 增 加 程 序 的 冗 长 程 度 。
-d
, --debug 输 出 一 些 调 试 信 息 。
--msgid-bugs-address
email@address 设 置 msgid 错 误 的 报 告 地 址 。 默 认 情 况 下 , 创 建 的 POT 文 件 没 有 Report-Msgid-Bugs-To 字 段 。
--copyright-holder
stringPOT 标 头 中 设 置 版 权 所 有 者 。 默 认 值 为 “自 由 软 件 基 金 会 有 限 公 司 。 ”
--package-name
string 设 置 POT 标 头 的 程 序 包 名 称 。 默 认 值 为 “包 装 ”。
--package-version
string 设 置 POT 标 头 的 软 件 包 版 本 。 默 认 值 为 “版 本 ”。 将 手 动 翻 译 转 换 为 po4a
po4a-gettextize
将 尝 试 提 取 任 何 提 供 的 翻 译 文 件 的 内 容 , 并 将 此 内 容 用 作 生 成 PO 文 件 中 的 msgstr。 请 注 意 , 此 过 程 非 常 脆 弱 : 翻 译 文 件 的 第 N 字 符 串 应 该 是 原 始 第 N 字 符 串 的 翻 译 。 除 非 两 个 文 件 共 享 完 全 相 同 的 结 构 , 否 则 这 自 然 不 起 作 用 。 在 内 部 , 每 个 po4a 解 析 器 报 告 每 个 提 取 字 符 串 的 语 法 类 型 。 这 是 在 gettexted 期 间 检 测 到 非 同 步 化 的 。 例 如 , 如 果 文 件 具 有 以 下 结 构 , 则 翻 译 中 的 第 4 个 字 符 串 ( 类 型 为 "章 节 ") 不 太 可 能 是 原 始 第 4 个 字 符 串 ( 类 型 为 "段 落 ") 的 翻 译 。 更 有 可 能 是 将 新 段 落 添 加 到 原 稿 中 , 或 者 两 个 原 始 段 落 在 翻 译 中 合 并 在 一 起 。

    Original         Translation
  chapter            chapter
    paragraph          paragraph
    paragraph          paragraph
    paragraph        chapter
  chapter              paragraph
    paragraph          paragraph

po4a-gettextize详 细 诊 断 任 何 检 测 到 的 结 构 不 同 步 。 发 生 这 种 情 况 时 , 应 手 动 编 辑 文 件 ( 这 可 能 需 要 您 具 有 目 标 语 言 的 一 些 概 念 ) 。 您 必 须 在 其 中 一 个 文 档 中 添 加 假 段 落 或 删 除 某 些 内 容 ( 或 两 者 ) 以 修 复 所 报 告 的 差 异 , 直 到 两 个 文 档 的 结 构 完 全 匹 配 。 下 一 节 将 介 绍 一 些 技 巧 。 即 使 成 功 处 理 文 档 , 未 检 测 到 的 差 异 和 静 默 错 误 仍 然 是 可 能 的 。 这 就 是 为 什 么 po4a -gettextize 自 动 关 联 的 任 何 翻 译 被 标 记 为 <fuzzy>需 要 人 工 检 查 。 必 须 检 查 每 个 检 索 到 的 msgstr 实 际 上 是 关 联 的 msgid 的 转 换 , 而 不 是 之 前 或 之 后 的 字 符 串 。 如 您 了 解 , 此 处 的 关 键 是 翻 译 的 文 档 和 原 始 文 档 中 具 有 完 全 相 同 的 结 构 。 最 好 的 方 法 就 是 对 用 于 翻 译 的 master.doc 的 确 切 版 本 进 行 文 本 化 , 并 且 仅 在 gettextd 成 功 后 针 对 最 新 的 主 文 件 更 新 PO 文 件 。 如 果 您 足 够 幸 运 , 在 文 件 结 构 中 拥 有 完 美 的 匹 配 , 则 构 建 正 确 的 PO 文 件 需 要 几 秒 钟 。 否 则 , 你 很 快 就 会 明 白 为 什 么 这 个 过 程 有 这 样 一 个 丑 陋 的 名 字 :)但 请 记 住 , 这 个 咕 咕 的 工 作 是 代 价 , 以 获 得 舒 适 的 po4a之 后 。 转 换 后 , 主 文 档 和 翻 译 之 间 的 同 步 将 始 终 完 全 自 动 。 即 使 事 情 出 错 , 文 本 化 通 常 仍 然 比 再 次 翻 译 所 有 内 容 更 快 。 尽 管 许 多 文 档 的 结 构 已 不 同 步 , 但 我 能 够 在 一 天 内 对 整 个 Perl 文 档 的 现 有 法 语 翻 译 进 行 文 本 化 。 这 是 超 过 两 兆 字 节 的 原 始 文 本 ( 200 万 个 字 符 ) : 从 头 开 始 翻 译 需 要 几 个 月 的 工 作 。 获 取 文 本 化 过 程 的 提 示 和 技 巧 检 测 到 非 同 步 一 点 后 , gettextization 将 停 止 。 从 理 论 上 讲 , 在 文 档 中 的 后 期 , 使 用 与 diff(1) 实 用 程 序 相 同 的 算 法 , 可 以 重 新 同 步 获 取 文 本 化 。 但 是 , 手 动 干 预 仍 是 必 需 的 , 以 手 动 匹 配 无 法 自 动 匹 配 的 元 素 , 这 解 释 了 为 什 么 未 实 现 自 动 重 新 同 步 ( 尚 未 实 现 ? ) 。 当 这 种 情 况 发 生 时 , 整 个 游 戏 归 结 到 这 些 该 死 的 文 件 的 结 构 再 次 通 过 手 动 编 辑 对 齐 。 po4a-gettextize关 于 它 发 生 时 哪 里 出 了 问 题 相 当 冗 长 。 它 报 告 不 匹 配 的 字 符 串 、 它 们 在 文 本 中 的 位 置 以 及 每 个 字 符 串 的 类 型 。 此 外 , 到 目 前 为 止 生 成 的 PO 文 件 将 转 储 为 gettextization.failed.po , 以 便 进 一 步 检 查 。 下 面 是 一 些 其 他 技 巧 , 以 帮 助 您 在 这 个 乏 味 的 过 程 :

• 删 除 翻 译 的 所 有 额 外 内 容 , 例 如 为 译 员 提 供 学 分 的 部 分 。 以 后 可 以 使 用 附 录 将 它 们 重 新 添 加 到

po4a 中 ( 请 参 阅 po4a(7)) 。

• 如 果 需 要 编 辑 文 件 以 对 齐 其 结 构 , 则 应 尽 可 能 选 择 编 辑 翻 译 。 实 际 上 , 如 果 对 原 始 版 本 的 更 改 过 于 具 有 侵 入 性 , 则 新 旧 版 本 在

PO 更 新 期 间 将 不 匹 配 , 并 且 相 应 的 翻 译 无 论 如 何 都 会 转 储 。 但 是 , 如 果 需 要 , 不 要 犹 豫 , 也 编 辑 原 始 文 档 : 重 要 的 是 获 得 第 一 个 PO 文 件 开 始 。

• 不 要 犹 豫 , 杀 死 任 何 原 始 内 容 , 将 不 存 在 在 翻 译 版 本 。 将

PO 文 件 与 文 档 同

步 时 , 以 后 将 自 动 重 新 引 入 此 内 容 。

• 你 或 许 应 该 告 诉 原 作 者 翻 译 中 似 乎 合 理 的 任 何 结 构 变 化 。 原 始 文 档 中 的 问 题 应 报 告 给 作 者 。 在 翻 译 中 修 复 它 们 只 会 为 社 区 的 一 部 分 修 复 它 们 。 此 外 , 使 用

po4a 时 不 可 能 ;)

• 有 时 , 段 落 内 容 确 实 匹 配 , 但 不 匹 配 其 类 型 。 修 复 它 与 格 式 相 当 相 关 。 在

POD 和 人 中 , 它 通 常 来 自 这 样 一 个 事 实 , 即 其 中 一 个 包 含 以 空 白 开 头 的 行 , 而 另 一 个 则 不 包 含 。 在 这 些 格 式 中 , 此 类 段 落 不 能 换 行 , 因 此 成 为 不 同 的 类 型 。 只 需 删 除 空 间 , 您 就 没 事 了 。 它 也 可 能 在 XML 中 的 标 记 名 称 中 出 现 拼 写 错 误 。 同 样 , 当 分 隔 线 包 含 某 些 空 格 时 , 或 者 当 =item 行 和 项 内 容 之 间 没 有 空 行 时 , 两 个 段 落 可 能 会 合 并 到 POD 中 。

• 有 时 , 取 消 同 步 消 息 似 乎 很 奇 怪 , 因 为 翻 译 附 加 到 错 误 的 原 始 段 落 。 这 是 流 程 早 期 未 检 测 到 问 题 的 迹 象 。 通 过 检 查

gettextization.failed.po 来 搜 索 实 际 的 取 消 同 步 点 , 并 修 复 问 题 的 实 际 所 在 。

• 在 一 些 不 幸 的 环 境 中 , 你 会 觉 得

po4a 吃 了 文 本 的 某 些 部 分 , 无 论 是 原 文 还

是 翻 译 。 gettextization.failed.po 表 示 两 个 文 件 都 匹 配 到 段 落 N。 但 是 , 如 果 尝 试 ( 不 成 功 ) , 原 始 文 件 中 的 N+1 段 落 不 会 与 翻 译 中 的 N+1 段 落 匹 配 , 而 是 与 N+2 段 落 匹 配 。 就 像 在 文 档 中 看 到 的 N+1 段 落 在 过 程 中 从 文 件 中 消 失 一 样 。 当 同 一 段 落 在 文 档 中 重 复 时 , 就 会 发 生 这 种 不 幸 的 情 况 。 在 这 种 情 况 下 , 在 PO 文 件 中 不 会 创 建 任 何 新 条 目 , 而 是 向 现 有 引 用 添 加 新 引 用 。 因 此 , 当 两 个 相 似 但 不 同 的 段 落 以 完 全 相 同 的 方 式 翻 译 时 , 将 发 生 前 一 种 情 况 。 这 显 然 将 删 除 翻 译 的 一 段 。 要 解 决 此 问 题 , 请 稍 微 更 改 文 档 中 的 一 个 翻 译 就 足 够 了 。 您 还 可 以 选 择 终 止 原 始 文 档 中 的 第 二 段 。 相 反 , 如 果 在 原 始 文 档 中 出 现 两 次 的 同 一 段 落 在 两 个 位 置 没 有 以 完 全 相 同 的 方 式 翻 译 , 您 就 会 感 觉 到 原 始 文 档 中 的 一 段 刚 刚 消 失 。 只 需 将 最 佳 翻 译 复 制 到 翻 译 文 档 中 的 另 一 个 翻 译 , 即 解 决 问 题 。

• 最 后 一 点 , 如 果

PO 文 件 的 第 一 次 同 步 需 要 很 长 时 间 , 不 要 太 惊 讶 。 这 是 因

为 由 gettextization 生 成 的 PO 文 件 的 msgid 与 从 最 近 主 文 件 生 成 的 POT 文 件 的 任 何 元 素 不 完 全 匹 配 。 这 强 制 使 用 昂 贵 的 字 符 串 接 近 算 法 搜 索 最 近 的 一 个 。 例 如 , Perl 文 档 的 法 语 翻 译 ( 5.5 MB PO 文 件 ) 的 第 一 个 po4a-updatepo 花 了 大 约 48 小 时 ( 是 的 , 两 天 ) , 而 后 续 的 po4a-updatepo 文 件 只 需 十 几 秒 。

参 见

po4a(1), po4a-normalize(1), po4a-translate(1), po4a-updatepo(1), po4a(7).

作 者

 Denis Barbier <barbier [AT] linuxfr.org>
 Nicolas François <nicolas.francois [AT] centraliens.net>
 Martin Quinson (mquinson#debian.org)

版 权 和 许 可

版 权 所 有 2002-2020, SPI, Inc. 此 程 序 是 自 由 软 件 ; 您 可 以 根 据 GPL 条 款 重 新 分 发 和 /或 修 改 它 (请 参 阅 复 制 文 件 )。