2011-11-23 108 views
2

我即將爲我的僱主啓動一個本地化項目。它涉及一個預先存在的項目,它具有許多Windows窗體和一個已建立的代碼庫,用C#和ASP.NET編程。我已經研究瞭如何在Visual Studio中本地化應用程序並找到資源。用擴展方法替代本地化

雖然這些都是解決問題的充分辦法,但我並不完全滿意使用資源的不利方面。這就是說,它具有相當大的佔用空間,需要對每個表單文件進行更改。此外,資源文件只能在Visual Studio中編輯。我寧願讓沒有編程知識的外部翻譯人員進行翻譯。

於是我想出了一個替代解決方案:

建立一個靜態的本地化工具類的擴展方法對字符串:

public static String Localize(this String s) 

從文件的實用程序類加載的本地化字符串上啓動。當程序需要某個字符串時,它被稱爲

"foo".Localize(); 

而程序將使用字符串本身作爲表中的鍵來查找翻譯。 這似乎是一個安全和有效的解決方案,我很滿意它留在現有代碼庫上的小腳印。

基本上我要問:

  • 是否有不足之處,以我的解決方案,我已經錯過了嗎?
  • 我應該查看哪些文件格式的本地化數據(我已經遇到.po文件格式)?
  • 是否有足夠的理由偏離資源文件解決方案?

任何建議和/或您可能有的考慮將不勝感激。

+1

我認爲對現有代碼庫的影響是一樣的。您必須將該方法添加到所有當前文字。你打算使用文字「選擇三個選項之一香蕉,獼猴桃還是橙色」作爲關鍵?聽起來很棘手。我不會偏離完美理智的默認解決方案。如果添加了不同的語言,您總是可以重新部署應用程序。 – Bas

回答

0

我的解決方案有缺點,我錯過了嗎?

我可以指出一些,aspx文件中的文本怎麼樣。你打算讓你的擴展方法也可以使用嗎?我想這會很難。

例如<asp:Label Text="Title"> - 你將如何翻譯?

此外,您的某些說法並不完全正確。

資源文件是在Visual Studio中唯一可編輯的

它們是XML文件,所以你可以使用任何編輯器來編輯或編寫自定義工具來做到這一點。

+0

實際上,這也是表單設計器生成的文件中的問題。我以爲我會在主控制器上運行一個遞歸函數,它會遍歷所有的控件並本地化它們的Text屬性。 –

+0

您認爲資源爲xml文件的觀點在技術上是正確的。但是xml根本不可讀,爲它們編寫自定義實用程序並不是完全可取的:) –

0

是否有不足之處,以我的解決方案,我已經錯過了嗎?

標準資源文件不僅僅是改變文本。

您可能需要調整特定元素的大小以適應新文本(如果您不使用現有佈局管理機制)。對於某些語言,您需要更改字體/字體大小(例如中文,日文,韓文)或對齊方式(請考慮從阿拉伯語和希伯來語等右向左語言)。

此外,翻譯標準文件意味着使用瞭解格式的編輯器可以看到「按原樣」的對話框,因此它提供比獨立字符串更多的上下文,從而獲得更好的翻譯質量。