Отправляет email-рассылки с помощью сервиса Sendsay

Дневник программиста

  Все выпуски  

Дневник программиста О локализации


 О локализации


   Как видно из предыдущей записи я заканчиваю написание программы поиска для КПК. Когда только начинал писать ее не думал, что там будет много текста. Однако вчера, посмотрел в исходный код и ужаснулся. Текст в интерфейсе, сообщения об ошибках, предупреждение и вопросы пользователям - все это потянет на несколько килобайт текста. Поэтому было принято решение для простоты локализации свести весь этот текст воедино. Так будет и проще править  и легче переводить на нужный язык. Сначала хотел создать xml файл, но потом почитал советы на rsdn.ru  и решил взять за модель Total Commander. Там есть текстовый файл с расширением LNG и в нем идут строки вида:

Номер = "Значение"

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

Вот этот класс:

    Код класса приведен на языке программирования C#. Класс содержит 2 статических метода. Один из них, доступный из вне, получает значение текстовой строки номер которой указан в левой части перед знаком равно. Второй приватный метод - получает директорию в которой располагается приложение. Это сделано так сложно из-за того, что класс заточен для использования в КПК. А там не работает функция получения текущей директории. Так же класс не позволяет задать имя файла. 


//Код класса 

public class Localize
    {
        public Localize()
        {
        
        }

        public static string GetTextString(string number)
        {
            string value = "";
           // Process pr = Process.GetCurrentProcess();
            //FileInfo fi = pr.StartInfo;
            string lang =GetApplicationPath() + "language.lng";
            using (StreamReader sr = new StreamReader(lang, Encoding.GetEncoding(1251))) //Для поддержки русского языка кодировка 1251
            {
                while (sr.Peek() >= 0)
                {

                    string nextString = sr.ReadLine();
                    int iNum = nextString.IndexOf("=");
                    if (iNum != -1)
                    {
                        string num = nextString.Substring(0, iNum);

                        if (num == number)
                        {
                            string[] val = new string[3];
                            //value = nextString.Substring(iNum + 2, nextString.Length - 2);
                            val = nextString.Split('"');
                            value = val[1];
                        }
                    }
                }


            }
            return value;
        }

   

    private static string GetApplicationPath()
          {
              string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName);
       
              if (path[path.Length - 1] != '\\')
                  path += '\\';
             
              return path;

          }
  }


 


В избранное