Изменить слова в приложении в зависимости от языковых настроек - PullRequest
0 голосов
/ 21 марта 2012

У меня есть приложение, которое подключено к серверу.Мое приложение должно быть многоязычным, поэтому на моем сервере есть языковые файлы.Мне нужно изменить язык моих слов на выбранный ими язык.

Каков наилучший способ сделать это?Должен ли я использовать изолированное хранилище?

1 Ответ

0 голосов
/ 21 марта 2012

Установите пару ключей / значений для известных ключей, которые вы будете использовать в своем приложении, и их значение.

Затем создайте Dictionary<string,string>

Затем создайте все ключи и резервный текст на всякий случай.

Сериализация всего словаря в одной части с использованием BinarySerializer, например Sharp Serializer

Затем serialize Dictionary в форме

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"; } }
}
...