         contentGroupKeysToStartTimes.removeValue(forKey: key)
         return measureTime
     }
+
+    private func language(from siteURLString: String?) -> String? {
+        guard let siteURLString = siteURLString else {
+            return nil
+        }
+        return URL(string: siteURLString)?.wmf_language
+    }
 }

    let label: EventLoggingLabel?
    let key: String?
    let midnightUTCDate: Date?
    convenience init(_ group: WMFContentGroup?) {
        self.init(label: group?.eventLoggingLabel, key: group?.key, midnightUTCDate: group?.midnightUTCDate)
    }
    init(label: EventLoggingLabel?, key: String?, midnightUTCDate: Date?) {
        self.label = label
        self.key = key
        self.midnightUTCDate = midnightUTCDate
        super.init()
    }
}

    }

    public func logFeedImpression(for context: FeedFunnelContext?) {
        log(event(category: .feed, label: context?.label, action: .impression, measureAge: measureAge(for: context?.midnightUTCDate)), language: language(from: context?.siteURLString))
    }

    // MARK: Feed detail

    public func logArticleInFeedDetailPreviewed(for context: FeedFunnelContext?, index: Int?) {
        log(event(category: .feedDetail, label: context?.label, action: .preview, measureAge: measureAge(for: context?.midnightUTCDate), measurePosition: index), language: language(from: context?.siteURLString))
    }

    public func logArticleInFeedDetailReadingStarted(for context: FeedFunnelContext?, index: Int?, maxViewed: Double) {
        log(event(category: .feedDetail, label: context?.label, action: .readStart, measureAge: measureAge(for: context?.midnightUTCDate), measurePosition: index, measureTime: measureTime(key: context?.key), measureMaxViewed: maxViewed), language: language(from: context?.siteURLString))
        startMeasuringTime(for: context?.label, key: context?.key)
    }

    public func logFeedCardClosed(for context: FeedFunnelContext?, maxViewed: Double) {
        log(event(category: .feedDetail, label: context?.label, action: .closeCard, measureAge: measureAge(for: context?.midnightUTCDate), measureTime: measureTime(key: context?.key), measureMaxViewed: maxViewed), language: language(from: context?.siteURLString))
    }

    public func logFeedDetailShareTapped(for context: FeedFunnelContext?, index: Int?, midnightUTCDate: Date?) {
        log(event(category: .feedDetail, label: context?.label, action: .shareTap, measureAge: measureAge(for: context?.midnightUTCDate), measurePosition: index), language: language(from: context?.siteURLString))
    }

    public func logFeedDetailShareTapped(for context: FeedFunnelContext?, index: Int?) {
        log(event(category: .feedDetail, label: context?.label, action: .shareTap, measureAge: measureAge(for: context?.midnightUTCDate), measurePosition: index), language: language(from: context?.siteURLString))
    }

    // MARK: Utilities
