2012-03-21 84 views
0

我有一個連接到服務器的應用程序。我的應用程序必須是多語言的,所以我的服務器上有語言文件。我需要將我的單詞的語言改爲他們選擇的語言環境。根據語言設置更改應用程序中的單詞

這樣做的最好方法是什麼? 我應該使用隔離存儲嗎?

回答

0

建立您將在您的應用中使用的已知密鑰的集合鍵/值對及其值。

然後,創建一個Dictionary<string,string>

然後,創建所有的鑰匙,以防萬一備用文本。

序列化在一塊整個字典使用BinarySerializer像Sharp Serializer

然後,serializeDictionary形式

strings.default 

然後,讓你的服務器返回XML,JSON等與鍵/價值觀和語言。

<strings language="en-us"> 
<string name="start">start</string> 
</strings> 

連載這盤在另一詞典:

strings.en-us 

然後,當應用程序啓動時,決定語言,抓住從磁盤上的文件,每當你需要使用字符串,關鍵他們在字典裏。一次存儲整個字典將會阻止一遍又一遍地轉到磁盤的性能。

//爲您的字符串創建一個接口。這將允許您創建一個不依賴於您的服務器/實現的DesignTime版本。

public interface IStringDictionary 
    { 
     string Start { get; } 
     //the rest of your strings 
    } 

//創建字典的實現。

public class StringDictionary : IStringDictionary 
    { 
     private Dictionary<string, string> _dictionary; 

     public StringDictionary(string languageName = "default") 
     { 

      DictionaryLanguage = languageName; 

     } 

     public string Start 
     { 
      get { return _dictionary["start"]; } 
      //your predefined key here, (should probably fallback/return null, or something) 
     } 



     private string _dictionaryLanguage; 

     public string DictionaryLanguage 
     { 
      get { return _dictionaryLanguage; } 
      set 
      { 
       if (_dictionaryLanguage == value) return; 
       _dictionaryLanguage = value; 
       _dictionary = LoadFromDisk("strings." + value); //create this method 
      } 
     } 



    } 

//創建一個模擬版本

public class MockStringDictionary : IStringDictionary 

{ 
    public string Start { get { return "start"; } } 
} 
+0

謝謝您的輸入反應。這非常幫助我。 – Kenny 2012-03-22 13:46:03

相關問題