2010-09-08 96 views
2

我有一個多語言應用程序,客戶想要編輯他想要的Resources.resx文件。 我創建Silverlight項目並添加一些文件:在Silverlight中從文件夾加載資源「.resx」

  1. Resources.resx
  2. Resources.en-US.resx1。
  3. Resources.uk-UA.resx2。

他們都有建設行動「嵌入的資源」

一切工作,但這些文件是內嵌到XAP文件。客戶不能編輯它們。

我的資源管理器,我得到這樣的:

private static ResourceManager manager; 
     public static ResourceManager Manager 
     { 
      get 
      { 
       if (manager == null) 
        manager = new ResourceManager("Project.Resources", Assembly.GetExecutingAssembly()); 
       return manager; 
      } 
     } 

如何從某些文件夾中得到這個資源,而不是建立他們.xap文件???

+2

也許,將資源類型更改爲資源而不是嵌入式資源? – 2010-09-08 08:29:12

+1

然後我有錯誤:無法找到任何適合指定文化或中性文化的資源。確保在編譯時將「Infopulse.MSEA.BPSurvey.TypesEditor.Resources.TypesEditorResources.resources」正確嵌入或鏈接到程序集「TypesEditor」中,或者所有需要的附屬程序集均可加載並完全簽名 – Evgeny 2010-09-08 08:35:55

+2

這些資源是否僅用於本地化字符串,還是他們還有其他資源類型? – 2010-09-08 08:49:52

回答

3

由於這只是一個字符串定位問題,只是想和你選擇一整套本地化內容的靈活性,有幾種方法了那裏你的字符串綁定到資源管理器。 他們大多是期望的結果過於複雜:

考慮以下幾點:

我見過
  • 大多數解決方案都需要有約束力的聲明大約80個字符長爲每一個條目。這包括沒有聰明的轉換器使用結束。
  • 我看到的大多數解決方案都將每個字符串都實現爲通知屬性(這對於幾乎不會改變的字符串來說似乎是一個巨大的開銷)。
  • 本地化通常不需要即時更新(您可以隨時刷新當前頁面)。

一個簡單得多的方法是簡單地將您的字符串,如名稱值對,在全球應用字典和通過短/簡單靜態資源例如結合引用它們

Text={StaticResource L_MenuHome} 

剩下的問題是,然後就如何得到另一套語言字符串進入App詞典(這其實很簡單):

  • 直接把你的默認語言的字符串到您的App.xaml (這有助於開發,因爲丟失的鍵將導致異常)。
  • 通過任何方便的方式(XML文件,XAML文件,CSV或通過webservice從數據庫中取出任何新選擇的語言)
  • 用新加載的數據替換字典條目。您唯一要做的就是確保密鑰已經存在,或者您必須添加一個條目或設置一個條目。
  • 刷新當前頁面(帶他們回到主頁的語言變化後?)

我不知道爲什麼每個人似乎都在StaticResources做的工作就好了,並與愛真正複雜的解決方案更少的努力。我們也傾向於使用Web服務從數據庫中獲取一組語言字符串,因爲它通常小於200K,數據庫更新靈活得多。

無論如何,只是試圖將一些常識性語言帶回本地化。它適合我們。隨意使用,忽略,建議改進等。

希望這會有所幫助。

+1

@Hi Tech:感謝您的想法。我目前將所有字符串存儲在本地獨立存儲數據庫(從服務器下載)中。我的老闆想要的一件事就是記錄所有未翻譯的語言字符串 - 所以當我正常工作在用戶界面上時,如果找不到它,則會打電話來翻譯它,但並不是這樣它需要本地化。 我現在用一個轉換器來做到這一點 - 在每個字符串上它調用一個方法,如果它不在那裏,它會標記它。你能想出任何如何使用靜態資源並標記尚未翻譯的字符串的方法嗎?謝謝 – Rodney 2011-03-01 22:06:14

+1

其實 - 您能否詳細說明如何將語言字符串加載到App.xaml中?我目前使用的是一個Converter,它調用一個方法在我的字典對象中查找字符串 - 問題在於我無法確定它是否已經被轉換。 – Rodney 2011-03-01 23:42:25

+1

@Rodney:我們只在啓動時加載本地化(進入全球應用程序字典)。爲了填充我們的數據庫,我們採用其他方式:爲了確定哪些字符串存在本地化,我們分別掃描項目中的所有XAML文件,並將缺少的條目添加到我們的「開發英語」語言表中。我們稱之爲「開發英語」是我們的出發點(編碼器放在XAML中)。我們假設真正的英語將由商業夥伴翻譯成「開發英語」......不能相信編碼人員知道營銷要求:) – 2011-03-02 16:03:50

2

您可以嘗試下載相應的文件並將其存儲在您的獨立存儲中,然後嘗試從此處讀取它。你可以這樣做在應用程序啓動

既然你只有在你的RESX字符串,我建議您複製資源的項目與一些預定義的格式簡單的文本,並從那裏閱讀。如果您需要任何具體實施細節方面的幫助,請告知我。