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. 正則表達式解析.strings文件
- 2. 正則表達式/解析XML文件
- 3. 使用正則表達式來解析$資源字符串
- 4. 解析表達式的資源
- 5. Ruby正則表達式文本解析
- 6. php的正則表達式資源
- 7. c#正則表達式列表解析
- 8. 解析javascript中的正則表達式
- 9. 解析正則表達式 - (Not enough)的
- 10. Python的正則表達式解析
- 11. 正則表達式解析的robots.txt
- 12. 正則表達式解析的queryString
- 13. 問題的正則表達式解析
- 14. Python的正則表達式解析器
- 15. Scala的正則表達式解析URL
- 16. xml解析中的正則表達式
- 17. 正則表達式來解析製表符分隔文件
- 18. 用正則表達式解析文本文件
- 19. 正則表達式的Python解析文件
- 20. 使用Python中的正則表達式解析PDF文件
- 21. 正則表達式的文件名解析
- 22. 正則表達式來解析註釋的配置文件
- 23. 正則表達式 - Java的拆分命令解析CSV文件
- 24. 解析二進制文件的正則表達式?
- 25. 正則表達式解析HTML
- 26. 如何解析正則表達式
- 27. 神交解析與正則表達式
- 28. 用正則表達式解析css
- 29. 解析和使用正則表達式
- 30. 正則表達式:解析出行
我沒有任何的.rc文件,可以:通過gettext和每個對話使用這樣的功能轉換在啓動的字符串PO文件你給我一個樣本,以便我可以爲它創建一個正則表達式? – Teifion 2008-09-10 08:37:01