定制 opencat/tmx 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

opencat/tmx

Composer 安装命令:

composer require opencat/tmx

包简介

TMX 1.4b parser and writer for the OpenCAT Framework

README 文档

README

TMX 1.4b parser and writer for the OpenCAT Framework.

Converts between TMX files and TranslationUnit objects. Used by opencat/translation-memory for import and export. You can also use it standalone for TMX manipulation.

Installation

composer require opencat/tmx

Requires ext-dom, ext-libxml, and ext-xmlreader.

Reading TMX files

DOM mode — small files (up to ~10,000 TUs)

use CatFramework\Tmx\TmxReader;

$reader = new TmxReader();
$units = $reader->read('memory.tmx');  // returns TranslationUnit[]

foreach ($units as $unit) {
    echo $unit->sourceLanguage . '' . $unit->targetLanguage . PHP_EOL;
    echo $unit->source->getPlainText() . PHP_EOL;
    echo $unit->target->getPlainText() . PHP_EOL;
}

Streaming mode — large files (100k+ TUs)

Uses XMLReader internally; yields one TranslationUnit at a time without loading the full document into memory.

foreach ($reader->stream('large-memory.tmx') as $unit) {
    // process $unit — only one TU is in memory at a time
    $tm->store($unit);
}

Writing TMX files

use CatFramework\Tmx\TmxWriter;
use CatFramework\Core\Model\TranslationUnit;

$writer = new TmxWriter();
$writer->write($units, 'exported.tmx');  // $units is TranslationUnit[]

Inline code support

TMX inline elements are mapped to InlineCode objects:

TMX element InlineCode type Notes
<bpt> OPENING Begin paired tag (bold open, link open, etc.)
<ept> CLOSING End paired tag
<ph> STANDALONE Standalone placeholder (line break, etc.)
<it pos="begin"> OPENING, isolated Isolated tag (tag boundary crossed a TU)
<it pos="end"> CLOSING, isolated Isolated tag

The i attribute is used as the InlineCode::$id pairing key (equivalent to XLIFF's rid).

Language matching

The srclang attribute on the <header> determines which <tuv> is the source. Matching is:

  1. Exact case-insensitive match ("en-US" == "EN-US")
  2. Prefix match (srclang="en" matches xml:lang="en-US")
  3. First <tuv> if no match

TMX file structure

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tmx SYSTEM "tmx14.dtd">
<tmx version="1.4">
  <header srclang="en-US" .../>
  <body>
    <tu tuid="1" creationid="translator@example.com" creationdate="20240101T120000Z">
      <prop type="x-domain">Legal</prop>
      <tuv xml:lang="en-US"><seg>Source text.</seg></tuv>
      <tuv xml:lang="fr-FR"><seg>Texte cible.</seg></tuv>
    </tu>
  </body>
</tmx>

<prop> elements are stored in TranslationUnit::$metadata. The creationid attribute maps to TranslationUnit::$createdBy.

Related packages

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 8
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-05-09

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固