/// <summary>
        /// Adds a new localized value.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <exception cref="ArgumentNullException"><paramref name="value"/> is <c>null</c>.</exception>
        internal static void InternalAddLocalizedValue(LocalizedValue value)
        {
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            if (_localizedValuesPurgeCount > PurgeLimit)
            {
                // Remove localized values the owners of which have been garbage collected

                lock (_localizedValues)
                {
                    List<LocalizedProperty> keys = null;

                    foreach (var item in _localizedValues.Keys)
                    {
                        if (false == item.IsAlive)
                        {
                            if (keys == null)
                            {
                                keys = new List<LocalizedProperty>();
                            }

                            keys.Add(item);
                        }
                    }

                    if (keys != null)
                    {
                        foreach (var key in keys)
                        {
                            _localizedValues.Remove(key);
                        }
                    }

                    _localizedValuesPurgeCount = 0;
                }
            }

            lock (_localizedValues)
            {
                var count = _localizedValues.Count;

                _localizedValues[value.Property] = value;

                if (count < _localizedValues.Count)
                {
                    // A new value has been added

                    _localizedValuesPurgeCount++;
                }
            }
        }
        /// <summary>
        /// Adds a new localized value.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <exception cref="ArgumentNullException"><paramref name="value"/> is <c>null</c>.</exception>
        public static void AddLocalizedValue(LocalizedValue value)
        {
            InternalAddLocalizedValue(value);

            // Update the value initially
            value.UpdateValue();
        }