Ulrichly我只是想从.rc文件中提取字符串,所以我可以翻译它们,但任何与.rc文件一起使用的东西都适用于我。解析资源(.rc)文件的正则表达式
回答
也许这有帮助吗? (http://social.msdn.microsoft.com/forums/en-US/regexp/thread/5e87fce9-ec73-42eb-b2eb-c821e95e0d31/)
他们使用下面的正则表达式来查找RC源的STRINGTABLE:??
(?< = \ bSTRINGTABLE \ S + BEGIN \ S +)*(= \ S + END \ b)
编辑 - 你可以阅读与多行选项下面的语句中的键值对:
@ “(*)”, “”, “\ S +(*)\ S +?”。
对于真实世界的项目,你会想,不仅提取它们也将它们放回,并跟踪更新。除了最微不足道的应用程序之外,这对于任何事情都是难以管理的。看看像appTranslator(www.apptranslator.com)这样的专业软件。不是免费的,但一些正则表达式解析不会削减它 - 我知道,我已经尝试了很多。
尽管rc文件似乎是一个明显的翻译起点,但事实并非如此。 开发人员的工作是确保应用程序是可翻译的。这不是管理翻译。从exe开始翻译,虽然有点反直觉,但这是一个更好的主意。 阅读更多关于它的地方:http://www.apptranslator.com/misconceptions.html
ResxCrunch有时会很快出来。 它将在一张表中编辑多种语言的多个资源文件。
我会考虑的gettext和.PO files使用,如果你的程序符合GNU许可证
1)我建议使用状态机算法的.rc文件中提取。
void ProcessLine(const char * str)
{
if (strstr(str, " DIALOG"))
state = Scan;
else if (strstr(str, " MENU"))
state = Scan;
else if (strstr(str, " STRINGTABLE"))
state = Scan;
else if (strstr(str, "END"))
state = DontScan;
if (state == Scan)
{
const char * cur = sLine;
string hdr = ...// for example "# file.rc:453"
string msgid;
string msgid = "";
while (ExtractString(sLine, cur, msgid))
{
if (msgid.empty())
continue;
if (IsPredefined(msgid))
continue;
if (msgid.find("IDB_") == 0 || msgid.find("IDC_") == 0)
continue;
WritePoString(hdr, msgid, msgstr);
}
}
}
2)提取里面ExtractString(串),你应该考虑字符“被表示为‘’,并且也有字符像\ t \ n \ r。所以状态机也在这里一个不错的选择。
以下字符串:
LTEXT "Mother has washed ""Sony"", then \taquarium\\shelves\r\nand probably floors",IDC_TEXT1,24,14,224,19
代表在对话这样的标签:
Mother has washed "Sony", then aquarium\shelves
and probably floors
3)然后在程序启动时,您应该加载。
int TranslateDialog(CWnd& wnd)
{
int i = 0;
CWnd *pChild;
CString text;
//Translate Title
wnd.GetWindowText(text);
LPCTSTR translation = Translate(text);
window.SetWindowText(translation);
//Translate child windows
pChild=wnd.GetWindow(GW_CHILD);
while(pChild)
{
i++;
Child->GetWindowText(Text);//including NULL
translation = Translate(Text);
pChild->SetWindowText(translation);
pChild = pChild->GetWindow(GW_HWNDNEXT);
}
return i;
}
在钢筋混凝土的情况下,更好地利用先进的解析器像http://www.soft-gems.net/index.php/java/windows-resource-file-parser-and-converter
- 1. 正则表达式/解析XML文件
- 2. 正则表达式解析.strings文件
- 3. 使用正则表达式来解析$资源字符串
- 4. 正则表达式{}解析
- 5. 正则表达式解析
- 6. 正则表达式解析
- 7. 解析表达式的资源
- 8. 正则表达式JavaScript。用当前正则表达式解析日志文件
- 9. 正则表达式 - 解析Csv文本
- 10. Ruby正则表达式文本解析
- 11. 解析文本与正则表达式
- 12. php的正则表达式资源
- 13. Python的正则表达式的表达式解析HTML文档
- 14. Javascript正则表达式资源
- 15. 资源文件中的正则表达式
- 16. 用Java正则表达式解析Drools规则文件
- 17. 在文本文件Powershell的解析正则表达式
- 18. c#正则表达式列表解析
- 19. URI解析的正则表达式
- 20. 解析数据的正则表达式
- 21. Python的正则表达式解析器
- 22. 解析javascript中的正则表达式
- 23. 正则表达式解析的queryString
- 24. xml解析中的正则表达式
- 25. 正则表达式解析的robots.txt
- 26. 的Java ::解析正则表达式
- 27. syslog的Python正则表达式解析
- 28. 解析的正则表达式:: number :: sentence ::
- 29. PHP的正则表达式解析行
- 30. 解析.net中的正则表达式
我没有任何的.rc文件,可以:通过gettext和每个对话使用这样的功能转换在启动的字符串PO文件你给我一个样本,以便我可以为它创建一个正则表达式? – Teifion 2008-09-10 08:37:01