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); }