所以,我为我的应用程序设置了一个小翻译系统,我们生成一个标记为可翻译的所有字符串的列表,将其转储为CSV作为翻译模板,然后翻译器填写下一列翻译.
我试图解决的问题是如何从代码库中提取一堆标记的字符串,以自动生成翻译模板.
c#代码的示例行类似于:
textBoxName.Text = string.Format(Translate.tr("Create {0}"), NextAutoName());
而c看起来像:
info_out << tr( L"Grip weights range from {0} to {1}" )(low_weight)(high_weight) << endl;
在c方面,为模板生成构建字符串列表使用c解析器(参见my previous question),该解析器作为项目中所有c代码的外部构建的一部分运行.基本上,自动提取放置在tr()调用中的任何字符串.
使用c#有比使用另一个解析器更好的解决方案吗?我想要一个在编译时生成的字符串列表,或者我可以在运行时访问的字符串列表.列表< string>会很好.
我想保持相同的翻译文件格式,因为这样可以更加简单地协调双方.正如您所期望的那样,我们重用了很多字符串.
现在,更方便的是保持翻译模板的最新状态 – 我只需要确保我想要翻译的字符串包含在tr()中,解析器处理其余部分.在c#中,我目前手动检查所有字符串,并使用新字符串更新c侧的虚拟函数.我接近崩溃,只是写另一个解析器.我希望c#具有高级功能,可以在这里做得更好.
最佳答案 我有一个项目实际上完全相同的事情.只有翻译解析器本身是用C#编写的(它的名字是c3po).除了解析项目之外,c3po还负责生成要发送给翻译供应商的文件,以及生成.net项目用于存储翻译字符串的文件.我们发现它比“传统的”.Net资源文件有几个优点:
1)因为c3po维护它自己的本地化字符串内部数据库,我们可以跟踪我们自己的翻译记忆库,并确保每个月只向翻译人员发送新的字符串.它还会删除不再需要的字符串.这为我们的文学翻译费用节省了数千美元.
2)开发人员可以随意编写他们想要的任何字符串,无论他们想要什么,他们都不必担心资源文件.
3)c3po同时为几个不同的项目提供服务,简化了我们与翻译供应商的互动.
4)我们可以通过我们的CI服务器自动执行c3po,因此每次开发人员签入时,(或者每晚一次或其他什么)我们都可以完成所有任务,包括向翻译人员发送文件,提取新短语等.