Exemplo n.º 1
0
        public static bool FallbackMode(LanguageTag languageTagInstance, string resourceKey,
                                        IReadOnlyDictionary <LanguageTag, ITranslateResource> resources, FallbackExperimenter experimenter)
        {
            if (resources.TryGetValue(languageTagInstance, out var resource) && resource.CanTranslate(resourceKey))
            {
                return(true);
            }

            var suitableTags = experimenter.GetSuitableTags(languageTagInstance).ToList();

            if (!suitableTags.Any())
            {
                return(false);
            }

            foreach (var tag in suitableTags)
            {
                if (resources.TryGetValue(tag, out resource) && resource.CanTranslate(resourceKey))
                {
                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Get resource by given language tag
        /// </summary>
        /// <param name="languageTag"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentException"></exception>
        public ITranslateResource GetResource(string languageTag)
        {
            if (string.IsNullOrWhiteSpace(languageTag))
            {
                return(null);
            }

            // ReSharper disable once InconsistentlySynchronizedField
            if (_langAndResourceMapCache.TryGetValue(languageTag, out var resource))
            {
                return(resource);
            }

            var languageTagInstance = LanguageTagManager.Get(languageTag);

            if (languageTagInstance == null)
            {
                throw new ArgumentException($"Cannot resolve an instance of LanguageTag by '{languageTag}'.");
            }

            if (_resources.TryGetValue(languageTagInstance, out resource))
            {
                return(resource);
            }

            var suitableTags = _fallbackExperimenter.GetSuitableTags(languageTagInstance).ToList();

            if (!suitableTags.Any())
            {
                throw new ArgumentException($"Cannot resolve a suitable LanguageTag by '{languageTag}'.");
            }

            var theMostSuitableTag = suitableTags.First();

            if (_resources.TryGetValue(theMostSuitableTag, out resource))
            {
                return(CacheAndReturn(languageTag, resource));
            }

            throw new ArgumentException($"Cannot resolve the resource by the given LanguageTag '{languageTag}'");
        }