예제 #1
0
        public void Update(string fileName, string key, string text)
        {
            foreach (KeyValuePair <string, List <LocalizationItem> > entry in localizationDictionary)
            {
                // search list
                if (entry.Key.Equals(fileName) == false)
                {
                    continue;
                }

                // correct list found
                List <LocalizationItem> list = entry.Value;

                try
                {
                    LocalizationItem localizationItem = list.Single(s => s.key == key);
                    localizationItem.value = text;
                }
                catch (Exception)
                {
                    // if there is no entry, we will get an exception
                    LocalizationItem localizationItem = new LocalizationItem();
                    localizationItem.key   = key;
                    localizationItem.value = text;

                    list.Add(localizationItem);
                }

                IsDirty = true;

                // done
                return;
            }
        }
        public static LocalizationItem GetLocalizationItemFromIpAddress(string ipAddress)
        {
            string           _ipAddress = ipAddress;
            LocalizationItem ipdata     = null;

            try
            {
                if (Utils.IsLocalhost())
                {
                    ipAddress = "199.60.221.180";
                }

                if (!String.IsNullOrWhiteSpace(ipAddress))
                {
                    WebClient client   = new WebClient();
                    string    response = client.DownloadString("http://ip-api.com/json/" + ipAddress);
                    if (response != null)
                    {
                        ipdata = JsonConvert.DeserializeObject <LocalizationItem>(response);
                        if (ipdata != null && ipdata.status != "fail")
                        {
                            ipdata.numLon          = Convert.ToDouble(ipdata.lon);
                            ipdata.numLat          = Convert.ToDouble(ipdata.lat);
                            ipdata.userHostAddress = _ipAddress;
                            return(ipdata);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Logger.GenerateError(e, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "ipAddress = " + ipAddress);
            }
            return(new LocalizationItem(49.2788, -123.1139, "Vancouver", _ipAddress));;
        }
예제 #3
0
        public void RemoveKey(string key)
        {
            // remove from the localization list
            foreach (KeyValuePair <string, List <LocalizationItem> > entry in localizationDictionary)
            {
                // correct list found
                List <LocalizationItem> list = entry.Value;

                try
                {
                    LocalizationItem localizationItem = list.Single(s => s.key == key);
                    list.Remove(localizationItem);
                }
                catch (Exception)
                {
                    // not in the list
                }
            }

            // remove from the global list
            try
            {
                ListViewEntry listViewEntry = collection.Single(s => s.Key == key);
                collection.Remove(listViewEntry);
            }
            catch (Exception)
            {
                // not in the list
            }

            IsDirty = true;
        }
 public void SelectLocalizedString(LocalizationItem s)
 {
     System.Windows.Controls.TextBox t = DynamicNode.GetCurrentEditTextBox();
     if (t != null)
     {
         t.Text = s.Key;
     }
 }
    public void AddLocalizationItem(string key, string value)
    {
        LocalizationItem tempItem = new LocalizationItem();

        tempItem.key   = key;
        tempItem.value = value;
        localizationData.items.Add(tempItem);
    }
        private void Body()
        {
            GUILayout.BeginHorizontal();

            var items = _localizationObjects[_lastSelectedLocalizationFile].LocalizationItems;

            GUILayout.Label("key", GUILayout.Width(100));
            foreach (var lang in Enum.GetNames(typeof(Languages)))
            {
                GUILayout.Label(lang, GUILayout.Width(100));
            }

            GUILayout.EndHorizontal();

            _scrollPosition = GUILayout.BeginScrollView(_scrollPosition, GUILayout.ExpandHeight(true));
            GUILayout.BeginVertical();

            LocalizationItem itemToRemove = null;

            foreach (LocalizationItem item in items)
            {
                GUILayout.BeginHorizontal();
                DrawLocalizationItem(item);

                if (GUILayout.Button("-", GUILayout.ExpandWidth(false)))
                {
                    itemToRemove = item;
                }
                GUILayout.EndHorizontal();
            }

            if (itemToRemove != null)
            {
                items.Remove(itemToRemove);
            }

            GUILayout.EndVertical();
            EditorGUILayout.EndScrollView();

            GUILayout.BeginHorizontal();
            _newItem = DrawLocalizationItem(_newItem);
            if (GUILayout.Button("+", GUILayout.ExpandWidth(false)))
            {
                if (string.IsNullOrEmpty(_newItem.Key))
                {
                    _newItem.Key = items.Count.ToString();
                }

                items.Add(_newItem);
                _newItem = new LocalizationItem();
            }
            GUILayout.EndHorizontal();
        }
        private LocalizationItem DrawLocalizationItem(LocalizationItem localizationItem)
        {
            localizationItem.Key = GUILayout.TextField(localizationItem.Key, GUILayout.Width(100));
            foreach (var lang in (Languages[])Enum.GetValues(typeof(Languages)))
            {
                if (!localizationItem.Values.ContainsKey(lang))
                {
                    localizationItem.Values.Add(lang, string.Empty);
                }

                localizationItem.Values[lang] = GUILayout.TextField(localizationItem.Values[lang], GUILayout.Width(100));
            }

            return(localizationItem);
        }
    void GetText(string filePath, string key, Action <string> action)
    {
        LocalizedTexts localizedTexts = null;

        StartCoroutine(DownloadFile.Download(filePath, (string jsonString) => {
            localizedTexts        = JsonUtility.FromJson <LocalizedTexts>(jsonString);
            LocalizationItem item = localizedTexts.items.Find(o => o.key == key);
            string result         = "";
            if (item != null)
            {
                result = item.value;
            }
            action.Invoke(result);
        }));
    }
        public static double GetDistance(LocalizationItem from, LocalizationItem to)
        {
            try
            {
                var sCoord = new GeoCoordinate(from.numLat, from.numLon);
                var eCoord = new GeoCoordinate(to.numLat, to.numLon);

                return(sCoord.GetDistanceTo(eCoord));
            }
            catch (Exception e)
            {
                Commons.Logger.GenerateError(e, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            }
            return(-1);
        }
    public static void Open(LocalizationItem item)
    {
        LocalizationDeleteItemWindow window = CreateInstance <LocalizationDeleteItemWindow>();

        //window.ShowUtility();
        window.item = item;

        bool option = EditorUtility.DisplayDialog("Delete Localization Item",
                                                  "Delete the localization item with key '" + item.key + "'?",
                                                  "Yes, delete.",
                                                  "No, cancel");

        if (option)
        {
            GetWindow <LocalizationEditor>().DeleteLocalizationItem(item);
        }
    }
예제 #11
0
        public bool RenameKey(string oldKey, string newKey)
        {
            // remove from the global list
            try
            {
                ListViewEntry listViewEntry = collection.Single(s => s.Key == newKey);
                // if no exception, then we already have the new key

                return(false);
            }
            catch (Exception)
            {
                // remove from the localization list
                foreach (KeyValuePair <string, List <LocalizationItem> > entry in localizationDictionary)
                {
                    // correct list found
                    List <LocalizationItem> list = entry.Value;

                    try
                    {
                        LocalizationItem localizationItem = list.Single(s => s.key == oldKey);
                        localizationItem.key = newKey;
                    }
                    catch (Exception)
                    {
                        // not in the list
                    }
                }

                // remove from the global list
                try
                {
                    ListViewEntry listViewEntry = collection.Single(s => s.Key == oldKey);
                    listViewEntry.Key = newKey;
                    listViewEntry.FirePropertyChanged("Key");
                }
                catch (Exception)
                {
                    // not in the list
                }
            }
            IsDirty = true;
            return(true);
        }
예제 #12
0
        public string OpenTranslation(string selectedPath)
        {
            // reset the lists
            Clear();

            // find all JSONs
            string[] filePaths = Directory.GetFiles(selectedPath, "*.json");

            if (filePaths.Length == 0)
            {
                return(null);
            }

            currentFolder = selectedPath;

            for (int i = 0; i < filePaths.Length; i++)
            {
                string filePath = filePaths[i];
                string fileName = Path.GetFileName(filePath);

                // load the JSON
                string           dataAsJson = File.ReadAllText(filePath);
                LocalizationData loadedData = JsonConvert.DeserializeObject <LocalizationData>(dataAsJson);

                // create a new list entry
                List <LocalizationItem> list = new List <LocalizationItem>();
                localizationDictionary.Add(fileName, list);

                for (int j = 0; j < loadedData.items.Length; j++)
                {
                    LocalizationItem localizationItem = loadedData.items[j];

                    // add the key to the list
                    if (collection.Any(p => p.Key == localizationItem.key) == false)
                    {
                        collection.Add(new ListViewEntry(localizationItem.key));
                    }
                    list.Add(localizationItem);
                }
            }

            return(selectedPath);
        }
        public ActionResult Index()
        {
            BrowseIndexViewModel model = new BrowseIndexViewModel();

            try
            {
                ViewBag.Title = "[[[Browse]]]";

                ProductFilter filter = new ProductFilter();

                LocalizationItem loc = DefaultUserLocalization;
                model.LocalizationJson = JsonConvert.SerializeObject(loc);
                model.ProductsListJson = JsonConvert.SerializeObject(_productService.GetProducts(filter));
                model.Language         = WebsiteLanguage;
            }
            catch (Exception e)
            {
                Logger.GenerateError(e, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, null);
            }
            return(View(model));
        }
예제 #14
0
 static void ReadFile(string filename, string className)
 {
     try
     {
         XmlSerializer x      = new XmlSerializer(typeof(XmlObject));
         TextReader    reader = new StreamReader(filename);
         string        fl     = reader.ReadToEnd();
         fl = fl.Replace(className, "XmlObject");
         StringReader strReader = new StringReader(fl);
         XmlObject    itm       = (XmlObject)x.Deserialize(strReader);
         foreach (var obj in itm.repetative)
         {
             LocalizationItem litm = new LocalizationItem(obj.name, obj.description);
             localizItems.m_itemList.Add(litm);
         }
     }
     catch (Exception e)
     {
         var cons = Console.Out;
         cons.WriteLine("Some error found:" + e.Message + " in the file:" + filename);
     }
 }
        private bool ApplyAppFilter(LocalizationItem item, IList <string> appsFilter)
        {
            foreach (var appFilter in appsFilter)
            {
                if (appFilter == null)
                {
                    if (item.Apps.Count < 1)
                    {
                        return(true);
                    }
                }
                else
                {
                    if (item.Apps.Contains(appFilter))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
    /// <summary>
    /// Loads language file from harddrive.
    /// </summary>
    /// <param name="languageCode">international language code("en_US", "de_DE", "tr_TR")</param>
    public static void LoadLanguage(string languageCode)
    {
        localizedTexts = new Dictionary <string, string>();
        string fileDirectory = Path.Combine(Application.streamingAssetsPath, "Localization");
        string fileName      = languageCode + ".json";
        string filePath      = Path.Combine(fileDirectory, fileName);

        if (File.Exists(filePath))
        {
            string           jsonData = File.ReadAllText(filePath);
            LocalizationData data     = JsonUtility.FromJson <LocalizationData>(jsonData);

            for (int i = 0; i < data.items.Length; i++)
            {
                LocalizationItem item = data.items[i];
                localizedTexts.Add(item.key, item.text);
            }
        }
        else
        {
            Debug.LogError("Cannot load file: " + filePath);
        }
    }
예제 #17
0
파일: Localizer.cs 프로젝트: snakems/ShareX
        /// <summary>
        /// Adds instance and property for localizing
        /// </summary>
        /// <param name="instance">Instance to object</param>
        /// <param name="propertyName">Name of property</param>
        /// <param name="resourceKey">Resource key</param>
        /// <param name="format">Custom string format</param>
        /// <param name="resourceManager">Resource manager</param>
        public static void Add(object instance, string propertyName, string resourceKey, string format, ResourceManager resourceManager)
        {
            // check
            if (instance == null)
            {
                throw new ArgumentNullException("instance");
            }
            if (String.IsNullOrEmpty(propertyName))
            {
                throw new ArgumentNullException("propertyName");
            }
            resourceKey = resourceKey ?? String.Empty;
            if (String.IsNullOrEmpty(resourceKey.Trim()))
            {
                throw new ArgumentNullException("resourceKey");
            }
            if (resourceManager == null)
            {
                throw new ArgumentNullException("resourceManager");
            }

            PropertyDescriptor descriptor = TypeDescriptor.GetProperties(instance)[propertyName];
            if (descriptor == null)
            {
                throw new ArgumentException("property does not belongs to instance", "propertyName");
            }

            // trace
            if (_tracingEnabled)
            {
                Trace.WriteLine(String.Format("Added item [Instance:\"{0}\" Property:\"{1}\" ResourceKey:\"{2}\" Format:\"{3}\"]", instance.ToString(), propertyName, resourceKey, format ?? String.Empty, resourceManager));
            }

            // create localization item
            LocalizationItem item = new LocalizationItem();
            item.Instance = instance;
            item.Manager = resourceManager;
            item.Property = descriptor;
            item.ResourceKey = resourceKey;
            item.Format = format;

            lock (_sync)
            {
                // check whether exists
                IEnumerable<LocalizationItem> existing = GetItems(instance, propertyName);
                if (existing.Count() > 0)
                {
                    if (_exceptionOnDuplicate)
                    {
                        throw new LocalizerException("This instance and property is already defined.");
                    }

                    Remove(instance, propertyName);
                }

                // add item
                _items.Add(item);
            }

            // localize item
            SetValue(item);
        }
예제 #18
0
        private static string ShowWindow()
        {
            MWindow window = new();

            window.SizeToContent         = SizeToContent.WidthAndHeight;
            window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
            window.Title       = "Rainbow Fonts";
            window.MinimizeBox = false;
            Grid grid = new();

            window.Content = grid;

            grid.RowDefinitions.Add(new RowDefinition()
            {
                Height = GridLength.Auto
            });
            grid.ColumnDefinitions.Add(new ColumnDefinition()
            {
                Width = GridLength.Auto
            });
            grid.ColumnDefinitions.Add(new ColumnDefinition());
            grid.ColumnDefinitions.Add(new ColumnDefinition()
            {
                Width = GridLength.Auto
            });

            Label tip = new();

            tip.Foreground = new SolidColorBrush(Colors.White);
            tip.Content    = "Text:";
            grid.Children.Add(tip);
            Grid.SetColumn(tip, 0);

            TextBox box = new();

            box.Width = 160;
            box.VerticalContentAlignment = VerticalAlignment.Center;
            box.Background = new SolidColorBrush(Color.FromArgb(20, 255, 255, 255));
            box.Foreground = new SolidColorBrush(Colors.White);
            grid.Children.Add(box);
            Grid.SetColumn(box, 1);

            Button btn = new();

            btn.Foreground = new SolidColorBrush(Colors.White);
            btn.Padding    = new Thickness(2);
            var loc = new LocalizationItem("UI.Confirm");

            BindingOperations.SetBinding(btn, ContentControl.ContentProperty,
                                         new Binding("Value")
            {
                Mode = BindingMode.OneWay, Source = loc
            });
            grid.Children.Add(btn);
            Grid.SetColumn(btn, 2);

            btn.Click += (s, e) =>
            {
                window.Close();
            };

            window.ShowDialog();
            return(box.Text);
        }
 private bool ApplyLanguageFilter(LocalizationItem item, Language language)
 {
     return(item.Values.ContainsKey(language));
 }
 private bool ApplyIOSPlatformFilter(LocalizationItem item)
 {
     return(item.Keys.ContainsKey(Platforms.IOS));
 }
        /// <summary>
        /// JSONのツリーを探索して、一つの言語分のデータをLangageData型のインスタンスとして作成します。
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="list"></param>
        private static void Traverse(JObject obj, ref LanguageData list)
        {
            foreach (var item in obj)
            {
                var value = item.Value;
                // itemがツリー構造の枝/葉のどちらか判定
                var isLeaf = value.Type != JTokenType.Object;

                if (isLeaf)
                {
                    var ns = TrimEnd(value.Path, "." + item.Key);

                    var str = value.Type != JTokenType.Array ? value.ToString() : value.ToString(Formatting.None);
                    var data = new LocalizationItem(ns, item.Key, str);
                    list.Add(data);
                }
                else
                {
                    Traverse((JObject)value, ref list);
                }
            }
        }
예제 #22
0
    private void OnGUI()
    {
        GUILayout.Space(sideMargins);

        GUILayout.BeginHorizontal(GUILayout.Height(30));
        GUILayout.Space(sideMargins);

        if (GUILayout.Button("Create new localization data"))
        {
            CreateNewData();
        }
        if (GUILayout.Button("Open data file"))
        {
            LoadGameData();
        }
        GUILayout.Space(sideMargins);
        GUILayout.EndHorizontal();

        if (!hasFile)
        {
            return;
        }

        //
        GUILayout.Space(50);
        EditorGUILayout.LabelField("Data input", EditorStyles.boldLabel);

        //Text limits and its input
        GUILayout.Label("Limit character count");
        GUILayout.BeginHorizontal(GUILayout.Height(20));
        GUILayout.Space(sideMargins);
        isTextLimited         = EditorGUILayout.BeginToggleGroup("Limit character count", isTextLimited);
        limitMessageBox       = EditorGUILayout.Toggle("MessageBox text (" + CoreUIManager.MessageBoxMaxCharacter + ")", limitMessageBox);
        limitSkillDescription = EditorGUILayout.Toggle("Skill Description text (" + CoreUIManager.SkillDescriptionMaxCharacter + ")", limitSkillDescription);
        EditorGUILayout.EndToggleGroup();
        GUILayout.Space(sideMargins);
        GUILayout.EndHorizontal();

        if (limitSkillDescription && limitMessageBox)
        {
            limitMessageBox       = false;
            limitSkillDescription = false;
        }

        if (limitMessageBox)
        {
            maxTextCount = CoreUIManager.MessageBoxMaxCharacter;
        }

        if (limitSkillDescription)
        {
            maxTextCount = CoreUIManager.SkillDescriptionMaxCharacter;
        }

        if (LocalizationData != null)
        {
            EditorGUI.HelpBox(new Rect(20, 35, 350, 40), "Now editing: " + filename, MessageType.Info);

            if (isEditing)
            {
                EditorGUILayout.LabelField("Editing key: " + key, EditorStyles.boldLabel);
            }
            else
            {
                key = EditorGUILayout.TextField("Key: ", key);
            }

            GUILayout.Label("English");
            english = EditorGUILayout.TextArea(english, GUILayout.Height(40));
            GUILayout.Label("Japanese");
            japanese = EditorGUILayout.TextArea(japanese, GUILayout.Height(40));

            if (isTextLimited)
            {
                if (english.Length > maxTextCount)
                {
                    english = english.Substring(0, maxTextCount);
                }
                if (japanese.Length > maxTextCount)
                {
                    japanese = japanese.Substring(0, maxTextCount);
                }
            }

            string labelName = isEditing ? "Edit" : "Add";
            //
            if (GUILayout.Button(labelName, GUILayout.Height(30)))
            {
                if (isEditing)
                {
                    foreach (var item in LocalizationData.Items)
                    {
                        if (item.Key == keyToEdit)
                        {
                            item.ValueJapanese = japanese;
                            item.ValueEnglish  = english;
                        }
                    }
                    isEditing = false;
                    return;
                }

                bool exists = false;
                foreach (var item in LocalizationData.Items)
                {
                    if (item.Key == key)
                    {
                        exists = true;
                    }
                }

                if (!exists)
                {
                    LocalizationItem newItem = new LocalizationItem();
                    newItem.Key           = key;
                    newItem.ValueJapanese = japanese;
                    newItem.ValueEnglish  = english;
                    LocalizationData.Items.Add(newItem);

                    //reset values.
                    key      = "";
                    japanese = "";
                    english  = "";
                }
                else
                {
                    EditorUtility.DisplayDialog("Duplicate", "Key already exists. Please edit it in the hierarchy when needed.", "Ok");
                }
            }

            EditorGUILayout.LabelField("Data view", EditorStyles.boldLabel);
            scrollPosition = GUILayout.BeginScrollView(scrollPosition);

            SerializedObject   serializedObject   = new SerializedObject(this);
            SerializedProperty serializedProperty = serializedObject.FindProperty("LocalizationData");
            EditorGUILayout.PropertyField(serializedProperty, true);
            serializedObject.ApplyModifiedProperties();

            GUILayout.EndScrollView();
        }

        GUILayout.BeginHorizontal(GUILayout.Height(20));
        GUILayout.Space(sideMargins);

        if (GUILayout.Button("Save Current"))
        {
            SaveGameDataToSameFileName();
        }

        if (GUILayout.Button("Save as new"))
        {
            SaveGameData();
        }
        GUILayout.Space(sideMargins);
        GUILayout.EndHorizontal();

        //Edit
        GUILayout.BeginHorizontal(GUILayout.Height(30));
        GUILayout.Space(sideMargins);

        if (GUILayout.Button("Edit entry"))
        {
            LocalizedEditWindow window = (LocalizedEditWindow)EditorWindow.GetWindow(typeof(LocalizedEditWindow), true, "Localization Keys");

            List <string> keys = new List <string>();
            foreach (var item in LocalizationData.Items)
            {
                keys.Add(item.Key);
            }

            window.AddKeys(keys);
            window.OnEdit = new UnityEngine.Events.UnityEvent();
            window.OnEdit.AddListener(() =>
            {
                keyToEdit = window.KeyToEdit;
                EditorUtility.DisplayDialog("Confirm", "Now editing: " + keyToEdit, "Ok");
                isEditing = true;

                foreach (var item in LocalizationData.Items)
                {
                    if (item.Key == keyToEdit)
                    {
                        key      = item.Key;
                        english  = item.ValueEnglish;
                        japanese = item.ValueJapanese;
                    }
                }

                window.Close();
                Repaint();
            });
        }

        if (isEditing && GUILayout.Button("Stop editing"))
        {
            isEditing = false;
            Repaint();
        }
        GUILayout.Space(sideMargins);
        GUILayout.EndHorizontal();
    }
 private bool ApplyAndroidPlatformFilter(LocalizationItem item)
 {
     return(item.Keys.ContainsKey(Platforms.Android));
 }
예제 #24
0
    private void OnGUI()
    {
        if (localizationData != null)
        {
            EditorGUI.HelpBox(new Rect(5, 5, 400, 40), "Now editing: " + filename, MessageType.Info);
            //EditorGUI.HelpBox(filename, EditorStyles.boldLabel, EditorStyles.helpBox);
            GUILayout.Space(55);
            key   = EditorGUILayout.TextField("Key: ", key);
            value = EditorGUILayout.TextField("Value: ", value);

            if (GUILayout.Button("Add", GUILayout.Height(30)))
            {
                bool exists = false;
                foreach (var item in localizationData.items)
                {
                    if (item.key == key)
                    {
                        exists = true;
                    }
                }

                if (!exists)
                {
                    LocalizationItem newItem = new LocalizationItem();
                    newItem.key   = key;
                    newItem.value = value;

                    List <LocalizationItem> temp = new List <LocalizationItem>();

                    foreach (var item in localizationData.items)
                    {
                        temp.Add(item);
                    }

                    temp.Add(newItem);

                    localizationData.items = temp.ToArray();
                }
                else
                {
                    EditorUtility.DisplayDialog("Key already exists. Please edit it in the hierarchy", "OK?", "Ok", "Ok?");
                }
            }

            EditorGUILayout.LabelField("Raw data view", EditorStyles.boldLabel);
            scrollPosition = GUILayout.BeginScrollView(scrollPosition);

            SerializedObject   serializedObject   = new SerializedObject(this);
            SerializedProperty serializedProperty = serializedObject.FindProperty("localizationData");
            EditorGUILayout.PropertyField(serializedProperty, true);
            serializedObject.ApplyModifiedProperties();

            GUILayout.EndScrollView();


            if (GUILayout.Button("Save localization data", GUILayout.Height(30)))
            {
                SaveGameData();
            }

            GUILayout.Space(20);
        }

        if (GUILayout.Button("Load localization data"))
        {
            LoadGameData();
        }

        if (GUILayout.Button("Create new localization data"))
        {
            CreateNewData();
        }

        GUILayout.Space(10);
    }
 public void DeleteLocalizationItem(LocalizationItem item)
 {
     localizationData.items.Remove(item);
 }
예제 #26
0
파일: Localizer.cs 프로젝트: snakems/ShareX
        /// <summary>
        /// Applies localization to item by specified culture
        /// </summary>
        /// <param name="item">Localization item</param>
        /// <param name="cultureInfo">Culture info</param>
        private static void SetValue(LocalizationItem item, CultureInfo cultureInfo)
        {
            // check
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }

            object value = null;
            CultureInfo culture = cultureInfo != null ? cultureInfo : CurrentCulture;
            try
            {
                TypeConverter converter = TypeDescriptor.GetConverter(item.Property.PropertyType);

                // resource is string
                if (converter.CanConvertFrom(typeof(string)))
                {
                    string formatedValue = item.Manager.GetString(item.ResourceKey, culture);
                    if (!String.IsNullOrEmpty(item.Format))
                    {
                        formatedValue = String.Format(culture, item.Format, formatedValue);
                    }

                    if (item.Property.PropertyType != typeof(string))
                    {
                        value = converter.ConvertFromString(formatedValue);
                    }
                    else
                    {
                        value = formatedValue;
                    }
                }
                else
                {
                    // resource is stream
                    if (item.Property.PropertyType == typeof(Stream))
                    {
                        value = item.Manager.GetStream(item.ResourceKey, culture);
                    }
                    else
                    {
                        value = item.Manager.GetObject(item.ResourceKey, culture);
                    }
                }
                lock (_sync)
                {
                    if (_items.Contains(item))
                    {
                        item.Property.SetValue(item.Instance, value);
                    }
                }
            }
            catch (Exception e)
            {
                throw new LocalizerException(e.Message, e);
            }
        }
예제 #27
0
파일: Localizer.cs 프로젝트: snakems/ShareX
 /// <summary>
 /// Applies localization to item
 /// </summary>
 /// <param name="item">Localization item</param>
 private static void SetValue(LocalizationItem item)
 {
     SetValue(item, null);
 }