import Hummingbird import Localization /// A request context that carries the language negotiated for the request. /// /// ``LocalizationMiddleware`` resolves the visitor's preferred language from the `Accept-Language` /// header and stores it here, so downstream controllers and middleware can serve the matching /// localization without re-reading the header. public protocol LocalizedRequestContext: RequestContext { // MARK: Properties /// The language identifier negotiated for the request. var language: String { get set } } // MARK: - Context /// The website's request context. /// /// Extends the core request storage with the negotiated language, defaulting to the default /// supported language until ``LocalizationMiddleware`` resolves it from the request. public struct WebsiteRequestContext: LocalizedRequestContext { // MARK: Properties /// The core request context storage Hummingbird requires. public var coreContext: CoreRequestContextStorage /// The language identifier negotiated for the request. public var language: String // MARK: Initializers /// Creates a request context for the given source. /// - Parameter source: the source the context is initialized from. public init(source: Source) { self.coreContext = .init(source: source) self.language = LanguageList(bundle: .module).default } }