Bilingual 双语文件类型

Bilingual 双语文件类型指的是在一个文件中包含两种文字语言,并且两种文字语言有规律可循

例1

en-US = "Hello World";
zh-CN = "你好世界";en-US = "What's the weather like today?";
zh-CN = "今天天气怎么样?";

例2

<tu>
<source>Hello World</source>
<target>你好世界</target>
</tu>
<tu>
<source>What's the weather like today?</source>
<target>今天天气怎么样?</target>
</tu>

例3

'国内' => 'Domestic',
'海外' => 'Overseas',
'当前操作环境' => 'Current Environment',
'开发环境' => 'Development ',

他们的共同点:

  1. 有规律可循
  2. 有的单元有完整译文,因此疑问需要处理为审校;有的单元没有译文,要处理为翻译

按照SDL Trados官方的处理建议是使用BilingualFileTypeAPI 编写自定义插件以支持文件类型
见 SDL File Type Support 3.0
http://producthelp.sdl.com/SDK/FileTypeSupport/3.0/html/671d5ad6-8de2-40a5-adc9-4406c146cf73.htm
建立一个Sniff类并继承 INativeFileSniffer接口
建立Paser类继承AbstractBilingualFileTypeComponent, IBilingualParser, INativeContentCycleAware, ISettingsAware接口
并且建立一个Writer类继承AbstractBilingualFileTypeComponent, IBilingualWriter, INativeOutputSettingsAware接口
并且还要处理TAG,Comments,ConfirmationLevel等细节

这看起来似乎有些复杂了,如果每次遇到双语文件类型都这么开发一次要花费的时间可观啊
有没有简单的方法呢,我们来找一下:
SDL Trados 2021 的解析器中有这样一个Excel解析器,Bilingual Excel
并且这个解析器定义了完善的处理规则,排除规则,备注规则,已存在内容的处理规则以及嵌入式规则
这基本上就是我们要的,那么我们就尝试使用这个Bilingual Excel处理器解析任意Bilingual File,要进行这样的操作我们就需要:

  1. 将Bilingual File转换为Bilingual Excel 然后进行翻译
  2. 将翻译后的Bilingual Excel中的翻译好的内容写回Bilingual File

以上面的例三为例,来看一下,首先Bilingual File转换为Bilingual Excel:

//现根据文档规则定义一个结构相关的正则表达式
public Regex RXRule = new Regex(@"^(\s+)?'(.*?)'(\s+)?=>(\s+)?'(.*?)',.*?$",RegexOptions.Compiled);//转换方法,我这里使用SimpleOOXML一个简单的OpenXML扩展来处理Excel
public void ReadFile(string infile, string outfile)
{  using (MemoryStream stream = SpreadsheetReader.Create()){using (SpreadsheetDocument doc = SpreadsheetDocument.Open(stream, true)){var sheet = SpreadsheetReader.GetWorksheetPartByName(doc, "Sheet1");var writer = new WorksheetWriter(doc, sheet);int counter = 0;using (StreamReader sr = new StreamReader(infile, Encoding.UTF8, true)){string line = "";while (sr.Peek() > 0){line = sr.ReadLine();string key, value;if (RXRule.IsMatch(line)){counter++;Match m = RXRule.Match(line);key = m.Groups[2].Value;value = m.Groups[5].Value;writer.PasteSharedText("A" + counter, counter.ToString());writer.PasteSharedText("B" + counter, key);if(key !=value)writer.PasteSharedText("C" + counter, value);}}}writer.Save();if (File.Exists(outfile))File.Delete(outfile);SpreadsheetWriter.StreamToFile(outfile, stream);}}}

用一段很简单的代码将文件转为下列表格形式
之后还要有将翻译后内容写回Bilingual File的功能

//现根据文档规则定义一个结构相关的正则表达式
//我们采用正则表达式替换的方式将译文写回
public Regex RXRule = new Regex(@"^(\s+)?'(.*?)'(\s+)?=>(\s+)?'(.*?)',(.*?)$", RegexOptions.Compiled);
string r1 = @"$1'$2'$3=>$4'";
string r2 = @"',$6";//转换方法,我这里使用SimpleOOXML一个简单的OpenXML扩展来处理Excel
public void ReadFile(string infile, string outfile)
{Dictionary<string, string> keyValuePairs = new Dictionary<string, string>();using (SpreadsheetDocument doc = SpreadsheetDocument.Open(infile, false)){WorkbookPart wbPart = doc.WorkbookPart;Sheet sheet = wbPart.Workbook.Descendants<Sheet>().FirstOrDefault(c => c.Name == "Sheet1");WorksheetPart wsPart = (WorksheetPart)wbPart.GetPartById(sheet.Id);if (sheet != null){SharedStringTable stringTable = doc.WorkbookPart.SharedStringTablePart.SharedStringTable;IEnumerable<Row> rows = wsPart.Worksheet.Descendants<Row>();//bool IsFirstRow = true;foreach (Row row in rows){Cell dDell = row.Descendants<Cell>().First<Cell>();if (!GetValue(dDell, stringTable).Equals("N/A")){IEnumerator<OpenXmlElement> o = row.GetEnumerator();o.MoveNext();o.MoveNext();string s = GetValue((Cell)o.Current, stringTable);o.MoveNext();string t = GetValue((Cell)o.Current, stringTable);KeyValuePair<string, string> N = new KeyValuePair<string, string>(s, t);if (!keyValuePairs.Contains(N))keyValuePairs.Add(s,t);}}}}
//先把Excel读到 Dictionary<string, string> keyValuePairs 里面
//然后一边读源文件一边替换并写出翻译后的文件using (StreamReader sr = new StreamReader(Path.ChangeExtension(infile,".php"), Encoding.UTF8, true)){using (StreamWriter sw = new StreamWriter(outfile, false, new UTF8Encoding(false))){string line = "";while (sr.Peek() > 0){line = sr.ReadLine();string key, value;if (RXRule.IsMatch(line)){Match m = RXRule.Match(line);key = m.Groups[2].Value;value = m.Groups[5].Value;string trans = "";if (keyValuePairs.TryGetValue(key, out trans)){line = RXRule.Replace(line, r1 + trans + r2);}sw.WriteLine(line);}else{sw.WriteLine(line);}}sw.Flush();}                    }
}

至此就完成了,是不是很容易了呢

SDL Trados 2021 Bilingual 双语文件类型处理相关推荐

  1. SDL Trados 2019 和 SDL Trados 2021 最新版本的下载地址 (2021年七月更新)

    SDL Trados 2019 和 SDL Trados 2021 最新版本的下载地址 SDL Trados 2019 CU 8 fix GS and Language Cloud 相关网络问题,正常 ...

  2. SDL Trados 2021 安装和体验 (体验)

    SDL Trados 2021 安装和体验 (体验) 安装请转至 https://blog.csdn.net/dark_2001/article/details/108069222 总体来说这次的改动 ...

  3. 体验SDL Trados 2021 翻译视频字幕

    对于视频字幕翻译以往多采用的是以下几种方式: 直接打开翻译ASS, SRT等字幕文件 文本文件直接操作有风险可能会破坏时间轴或样式 使用字幕工具,人人译世界,字幕通等第三方工具打开编辑字幕 不能使用到 ...

  4. SDL Trados 2021 安装和体验 (安装)

    最近 SDL Trados 2021 版本已经发布,我来简单体验一下: 首先安装.NET Framework 推荐最新版4.8,这个版本也是支持Win7的 https://dotnet.microso ...

  5. SDL Trados 2019 和 SDL Trados 2021 二零二一五月更新

    SDL Trados 2019 和 SDL Trados 2021 二零二一五月更新 好久没检查更新了 检查地址 https://update.sdl.com/updates/update1/stud ...

  6. SDL Trados 2021 最新版本的下载地址 (2021年12月更新)

    Cumulative Update 9 for Trados Studio 2021 SR2 (Build 16.2.9.9198, released on 15 December 2021) 下载地 ...

  7. SDL Trados 中翻译Json文件的处理和设置

    什么是JSON文件 JSON文件是用来存储简单的数据结构和对象的文件,可以在web应用程序中进行数据交换:JSON是全称为JavaScript Object Notation,是一种有条理,易于访问的 ...

  8. SDL Trados 2019 和 2021 十月更新

    SDL Trados 2019 和 2021 十月更新 十一假期之后查了一下更新,SDL Trados 2019 和 2021都发布了新版本 SDL Trados 2019 没有什么必要安装,针对个人 ...

  9. Markdown *.MD 文件 技术文档 在SDL Trados Studio中翻译

    Markdown *.MD 文件 技术文档 在SDL Trados Studio中翻译 Markdown 是一种最新主流的技术文档写作格式,广泛用于API编写,在技术领域十分流行,本篇文档也是在CSD ...

最新文章

  1. HDU 2084 数塔(DP)(JAVA版)
  2. MathType公式行距设置的方法
  3. bzoj 2457 [BeiJing2011]双端队列 模拟+贪心
  4. 【Linux系统编程】进程同步与互斥:System V 信号量
  5. 深入理解Spark 2.1 Core (一):RDD的原理与源码分析
  6. 图像正确(相当于这个小项目就要结尾了)
  7. c++ linux 环境,C++ 环境设置
  8. RCF - C ++的进程间通信
  9. DevExpress v18.2版本亮点——Office File API 篇
  10. dhcpd中的mac
  11. Matlab:求出n边凹多边形内角
  12. 有些CAD通过Arcgis程序读取后,发现面积不对
  13. c语言cm 英尺换算
  14. js大于等于小于等于书写
  15. Unity 删除物体
  16. PS非主流照片文字合成表现手法
  17. 增量式编码器c语言,增量式编码器
  18. 生成式人工智能是否会是下一个风口?
  19. SAP-PM设备模块-PM主数据之维护策略
  20. 面向企业级的开源WebGIS解决方案--MapGuide(介绍)

热门文章

  1. 解决error vmlinuz has invalid signature. alloc magic is broken at ...Aborted.press any key to exi
  2. Python中线程间通信
  3. [GRE] 填空经典1290题 错题(三)
  4. select取地区及下级区域_寒冷地区公共厨房通风系统方案分析与研究
  5. PyQt5使用程序关闭窗口(实测可用)
  6. 新版Web of science 如何导出全记录与引用的参考文献到Hisecite
  7. IEEE期刊论文投稿前期准备
  8. EGL Off-Screen rendering using GBM
  9. 1.15、C语言设计简易五子棋
  10. 一个新人想要从零基础成为次世代游戏设计师,需要哪些阶段呢?