     }
 
     public func logFeedImpression(for context: FeedFunnelContext?) {
-        log(event(category: .feed, label: context?.label, action: .impression, measureAge: measureAge(for: context?.midnightUTCDate)))
+        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))
+        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))
+        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))
+        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))
+        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))
+        log(event(category: .feedDetail, label: context?.label, action: .shareTap, measureAge: measureAge(for: context?.midnightUTCDate), measurePosition: index), language: language(from: context?.siteURLString))
     }
 
     // MARK: Utilities

    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()
    }
}

        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
    }
}
