예제 #1
0
        public async Task <string?> GetTranslationAsync(LanguageCodes languageCode,
                                                        TelegramTranslationKeys telegramTranslationKey,
                                                        bool omitCache          = false,
                                                        CancellationToken token = default)
        {
            const double timeoutDays = 1;
            var          key         = string.Format(TranslationCacheKeyFormat, languageCode, telegramTranslationKey);

            if (memoryCache.TryGetValue <string>(key,
                                                 out var result))
            {
                return(result);
            }

            var translation = await PolicySet.ReadPolicy
                              .ExecuteAsync(() => Context.TelegramTranslations
                                            .FirstOrDefaultAsync(x
                                                                 => x.Language == languageCode &&
                                                                 x.Key == telegramTranslationKey, token));

            var value = translation?.Value;

            if (!string.IsNullOrEmpty(value))
            {
                memoryCache.Set(key, value, new MemoryCacheEntryOptions
                {
                    SlidingExpiration = TimeSpan.FromDays(timeoutDays)
                });
            }

            return(value);
        }
예제 #2
0
        public async Task <string> ResolveAsync(TelegramTranslationKeys telegramTranslationKey, params object[] args)
        {
            var update       = userContextProvider.Update;
            var languageCode = ResolveLanguage(update);
            var result       = await hookrRepository.GetTranslationAsync(languageCode, telegramTranslationKey);

            return(FormatResult(result, telegramTranslationKey, args));
        }