/// <summary> /// Create translate resource /// </summary> /// <param name="template"></param> /// <typeparam name="TTemplate"></typeparam> /// <returns></returns> /// <exception cref="ArgumentNullException"></exception> public static ITranslateResource Create <TTemplate>(TTemplate template) where TTemplate : StandardLocalizationTemplate, ILocalizationTemplate, new() { if (template == null) { throw new ArgumentNullException(nameof(template)); } var anonymousTemplate = template.IsAnonymousTemplate(); if (!anonymousTemplate && string.IsNullOrWhiteSpace(template.Name)) { throw new ArgumentNullException(nameof(template.Name)); } var languageTag = LanguageTagManager.Create(template.Language); if (languageTag == null) { throw new ArgumentException($"Cannot resolve an instance of LanguageTag by '{template.Language}'."); } return(anonymousTemplate ? new TranslateResource( languageTag, TranslationManager.ANONYMOUS_RESOURCE_NAME, template.Contents.ToDictionary(k => k.Key.GetHashCode(), v => v.Value)) : new TranslateResource( languageTag, template.Name, template.Contents.ToDictionary(k => k.Key.GetHashCode(), v => v.Value))); }
private void MatchTagHelper1( int expected, string lhs, string rhs, MatchLevel matchLevel = MatchLevel.LanguageMatch) { Assert.Equal(expected, (LanguageTagManager.Create(lhs).Match(LanguageTagManager.Create(rhs), matchLevel))); Assert.Equal(expected, (LanguageTagManager.Create(rhs).Match(LanguageTagManager.Create(lhs), matchLevel))); }
internal bool HasResource(string languageTag) { if (string.IsNullOrWhiteSpace(languageTag)) { return(false); } var languageTagInstance = LanguageTagManager.Get(languageTag); return(HasResource(languageTagInstance)); }
/// <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}'"); }
/// <summary> /// Create Anonymous Localization Translate resource /// </summary> /// <param name="template"></param> /// <returns></returns> /// <exception cref="ArgumentNullException"></exception> /// <exception cref="InvalidOperationException"></exception> /// <exception cref="ArgumentException"></exception> public static ITranslateResource Create(AnonymousLocalizationTemplate template) { if (template == null) { throw new ArgumentNullException(nameof(template)); } if (!template.CheckMySelf()) { throw new InvalidOperationException("The AnonymousLocalizationTemplate has been illegally tampered with."); } var languageTag = LanguageTagManager.Create(template.Language); if (languageTag == null) { throw new ArgumentException($"Cannot resolve an instance of LanguageTag by '{template.Language}'."); } return(new TranslateResource( languageTag, TranslationManager.ANONYMOUS_RESOURCE_NAME, template.Contents.ToDictionary(k => k.Key.GetHashCode(), v => v.Value))); }
/// <summary> /// Create a new instance of <see cref="Text"/>. /// </summary> /// <param name="text"></param> /// <param name="packageKey"></param> /// <param name="languageTag"></param> /// <param name="parameters"></param> public Text(string text, string packageKey, string languageTag, params object[] parameters) : this(text, packageKey, LanguageTagManager.Get(languageTag), parameters) { }
/// <summary> /// Create a new instance of <see cref="Text"/>. /// </summary> /// <param name="processor"></param> /// <param name="text"></param> /// <param name="packageKey"></param> /// <param name="languageTag"></param> /// <param name="parameters"></param> public Text(TranslationProcessor processor, string text, string packageKey, string languageTag, params object[] parameters) : this(processor, text, packageKey, LanguageTagManager.Get(languageTag), parameters) { }
/// <summary> /// Translate in anonymous /// </summary> /// <param name="languageTag"></param> /// <param name="resourceKey"></param> /// <param name="strategy"></param> /// <returns></returns> public virtual string AnonymousTranslate(string languageTag, string resourceKey, AttemptStrategy strategy = AttemptStrategy.Fallback) { return(LanguageTagManager.TryGet(languageTag, out var languageTagInstance) ? AnonymousTranslate(languageTagInstance, resourceKey, strategy) : string.Empty); }