// Copyright (c) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; using System.Collections.Generic; using System.Collections; using System.Text; using System.IO; namespace PascalABCCompiler { public class StringResourcesLanguage { private static Hashtable AccessibleLanguagesHashtable = new Hashtable(StringComparer.OrdinalIgnoreCase); private static Hashtable AccessibleTwoLetterISOHashtable = new Hashtable(StringComparer.OrdinalIgnoreCase); private static Hashtable AccessibleLCIDHashtable = new Hashtable(StringComparer.OrdinalIgnoreCase); private static List accessibleLanguages = new List(); private static string DefaultLanguage = null; private static string DefaultTwoLetterISO = null; private static List twoLetterISOLanguages = new List(); public static List AccessibleLanguages { get { return accessibleLanguages; } } public static List TwoLetterISOLanguages { get { return twoLetterISOLanguages; } } private static string configDirectory = null; public static string ConfigDirectory { get { return configDirectory; } set { configDirectory = value; Load(); } } public static int CurrentLanguageIndex { get { return accessibleLanguages.IndexOf(DefaultLanguage); } } private static void Load() { DirectoryInfo dir = new DirectoryInfo(configDirectory); if (!dir.Exists) return; DirectoryInfo[] dirs=(dir).GetDirectories(); foreach (DirectoryInfo di in dirs) { string name = Path.Combine(di.FullName, ".LanguageName"); if (File.Exists(name)) { using (StreamReader sr = new StreamReader(name, System.Text.Encoding.GetEncoding(1251))) { string lname = sr.ReadLine(); string twoLetterISO = sr.ReadLine(); string LCID = sr.ReadLine(); if (lname == null || twoLetterISO == null || LCID == null) continue; if (!sr.EndOfStream && sr.ReadLine() == "default") { DefaultLanguage = lname; DefaultTwoLetterISO = twoLetterISO; } AccessibleLanguagesHashtable.Add(lname, di.FullName+Path.DirectorySeparatorChar/*"\\"*/); AccessibleTwoLetterISOHashtable.Add(lname, twoLetterISO); AccessibleLCIDHashtable.Add(twoLetterISO, LCID); accessibleLanguages.Add(lname); twoLetterISOLanguages.Add(twoLetterISO); } } } /*StreamReader sr = new StreamReader(configFileName, System.Text.Encoding.GetEncoding(1251)); string line,lname; int ind; accessibleLanguages.Clear(); AccessibleLanguagesHashtable.Clear(); while (!sr.EndOfStream) { line = sr.ReadLine(); if (line != "") { ind = line.IndexOf("="); lname=line.Substring(0, ind); AccessibleLanguagesHashtable.Add(lname, Path.GetDirectoryName(configFileName) + "\\" + line.Substring(ind + 1, line.Length - ind - 1)); accessibleLanguages.Add(lname); } } sr.Close();*/ } static StringResourcesLanguage() { } public static void LoadDefaultConfig() { ConfigDirectory = Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName),"Lng"); if (AccessibleLanguages.Count > 0) if (DefaultLanguage != null) { CurrentLanguageName = DefaultLanguage; CurrentTwoLetterISO = DefaultTwoLetterISO; } else { CurrentLanguageName = AccessibleLanguages[0]; CurrentTwoLetterISO = twoLetterISOLanguages[0]; } } private static string currentLanguageName = null; public static string CurrentLanguageName { get{return currentLanguageName;} set { if (AccessibleLanguagesHashtable[value] == null) return; currentLanguageName = value; currentTwoLetterISO = AccessibleTwoLetterISOHashtable[value] as string; currentLCID = AccessibleLCIDHashtable[currentTwoLetterISO] as string; StringResources.ResDirectoryName = AccessibleLanguagesHashtable[currentLanguageName] as string; StringResources.UpdateObjectsText(); } } private static string currentLCID = null; public static string CurrentLCID { get { return currentLCID; } } private static string currentTwoLetterISO = null; public static string CurrentTwoLetterISO { get{return currentTwoLetterISO;} set { currentTwoLetterISO = value; } } public static string GetLCIDByTwoLetterISO(string iso) { return AccessibleLCIDHashtable[iso] as string; } } }