Robię sobię apkę, która ma taką funkcję jak tagi. Każdy tag ma swój unikalny slug używany w URLach, np. sea-animals i tłumaczenia "pl" - "Zwierzęta morskie", "en" - "Sea animals" itd..

Encja Tag wygląda tak:

public class Tag : BaseEntity
{
    public string Slug { get; set; }
    public List<TagTranslation> Translations { get; set; }
}

public class TagTranslation
{
    public Tag Tag { get; set; }
    public string LanguageCode { get; set; }
    public string Text { get; set; }
}

Chcę to zmapować na TagDto i zwrócić tłumaczenie w odpowiednim języku na podstawie parametru languageCode.
Używam EF i Automappera i rozwiązanie które znalazłem do przekazania parametru w metodzie ProjectTo wydaje mi się mega dziwne. Otóż wygląda tak:

public class TagDto
{
    public string Slug { get; set; }
    public string Translation { get; set; }
}
// languageCode comes from request/user settings or somewhere else

var tag = await _context
    .Tags
    .ProjectTo<TagDto>(_mapper.ConfigurationProvider, new { lang = languageCode })
    .FirstOrDefaultAsync(p => p.Slug == request.Slug);
public class AutoMapperProfile : Profile
{
    public AutoMapperProfile() 
    {
        //...
        string lang = null;
        CreateMap<Tag, TagDto>()
            .ForMember(dto => dto.Translation, opt => opt.MapFrom((src) =>
                src.Translations.Where(t => t.LanguageCode == lang).Select(t => t.Text).FirstOrDefault()
            ));
    }
}

Nie wiem jak to działa, ale wstawiając lang=null przed CreateMap w jakiś sposób ten lang jest przekazany z metody ProjectTo. Rozwiązanie wzięte stąd: https://stackoverflow.com/a/63632801/10254338

Zastanawiam się czy podejście które stosuje jest złe w którymś miejscu? Czy potrzeba przekazywania parametru do mappera to sygnał, że coś jest nie tak z architekturą? Może podejście do obsługi wielojęzyczności mogłoby być lepsze?