public virtual string GetTranslation(object translationContent, string translationValueKey, CultureInfo basicCulture, CultureInfo targetCulture)
        {
            if (translationContent == null)
            {
                throw new ArgumentNullException("translationContent");
            }
            if (string.IsNullOrEmpty(translationValueKey))
            {
                throw new ArgumentNullException("translationValueKey");
            }
            if (basicCulture == null)
            {
                throw new ArgumentNullException("basicCulture");
            }
            if (targetCulture == null)
            {
                throw new ArgumentNullException("targetCulture");
            }

            string cacheKey    = string.Format("contentHachCode:{0} key:{1} culture{2}", translationContent.GetHashCode(), translationValueKey, targetCulture.Name);
            var    translation = _cache.GetOrLoad(cacheKey, () => ReadTranslation(translationContent, translationValueKey, basicCulture, targetCulture) ?? NullValue);

            return(translation == NullValue ? null : translation);
        }