SDLX的一些记录和相关开发

SDLX是SDL公司早期的一款本地化翻译工具,在2006年至2011年左右比较流行,SDL将SDLX和Trados合并打包在一起作为Translation Suite整体发布,同时SDLX还多年作为SDL 企业级系统TMS(Translation Manage System)的默认编辑器。SDLX是我个人比较喜欢的本地化翻译工具之一。
在这里插入图片描述SDLX 分为三个版本:

版本价格说明
Lite版 (简易版)免费Lite版功能有限,不能建立和转换文件,仅能编辑和保存双语文件ITD(仅限于Elite)
Pro版(专业版)在Translation Suite中附带专业版是最常见的版本提供了丰富的功能包括制作双语文件ITD,专业版的文件只能在专业版中编辑,不能在Lite版使用
ELite版(精英版)需单独许可TMS生成的ITD默认为Elite版本,只有带有Elite标记的ITD双语文件才能被Lite版本编辑

ITD是SDLX的双语文件格式,同时SDLX完全兼容Trados TTX文件,打开后是这样
在这里插入图片描述不同于基于XML的TTX文件类型,ITD是二进制的文件类型,不能用记事本打开查看,ITD本质上来说是两个文件一个otf,存储的是翻译语言资源,另一个是skl文件skeleton,记录了文件的结构信息。

不仅双语文件格式不同,SDLX的翻译记忆库和术语库文件格式也和Trados完全不同,SDLX使用MDB,本地Access数据库格式作为翻译记忆库,通知支持本地或远程SQL Server作为翻译记忆库数据存储,专业版就可以使用SQL Server,而对比其他产品以及现代产品SQL Server的使用通常要达到企业及应用才行,投入也是相当多的

SDLX使用C++编写,代码和接口不公开,因此不太容易调用,只能通过一些逆向的方法解决。知道后来我遇到了SDLX软件的作者才了解到更多的信息。

调用SDLX需要使用SDLX提供的一些Interop,比如Interop.S42ITDLib.dll
https://download.csdn.net/download/dark_2001/12354777

S42ITDLib
S42代表SDLX和版本
ITDLib提供了ITD文件的操作

以下列代码为例:

首先引用Interop.S42ITDLib.dll,命名空间加入

using S42ITDLib;

然后实例化对象

S42ITDObjClass SDLXITD = new S42ITDObjClass();

通过OpenITD和SaveITD的方法打开和关闭文件

SDLXITD.OpenITD(filename);
//todo
SDLXITD.SaveITD(filename);

不仅可以操作ITD文件还可以操作TTX文件:

SDLXITD.OpenTTX(filename);
SDLXITD.SaveTTX(filename);

打开ITD文件后可以通过GetSegmentCount方法获取一共有多少和Segment

int segCount = 0;
SDLXITD.GetSegmentCount(out segCount);

然后遍历获取Segment, Segment编号从1开始,不是0

for (int i = 0; i < segCount; i++)
{
    SEG_INFO segInfo;
    SDLXITD.GetSegmentInfoEx(i + 1, out segInfo);
}

Segment信息存在于SEG_INFO 对象中,常用的包括:

string source = segInfo.bstrSource
int score = segInfo.nScore
int confirmed = segInfo.bConfirmed
int MachineTranslated = segInfo.bMachineTranslated
int FormatPaintIgnored = segInfo.bFormatPaintIgnored
int FormatPaintRequired = segInfo.bFormatPaintRequired
int Locked = segInfo.bLocked

SDLX不适用boolean布尔值,以数字代替,非零为真,零为假

修改segment属性后通过

SDLXITD.UpdateSegmentEx(ref segInfo);

进行更新

SDLX 还提供了一个查找和替换的方法SDLXITD.SearchReplace:

 SEARCH_REPLACE_INFO srInfo = new SEARCH_REPLACE_INFO();
 srInfo.bMatchCase = 1;
 srInfo.bstrLogFile = "";
 srInfo.bWholeWord = 0;
 srInfo.nOperation = 2;//0|1|2-replace
 srInfo.nSearchLocation = 2; //0|1|2-target

 srInfo.bstrReplace = "x";
 srInfo.bstrFind = "a";
 SDLXITD.SearchReplace(ref srInfo);

个人的一些具体例子已开源在
https://github.com/Dark-20001/SDLX

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值