Files
yattee/Yattee/Models/TranslationContributor.swift
2026-02-08 18:33:56 +01:00

46 lines
1.2 KiB
Swift

//
// TranslationContributor.swift
// Yattee
//
// Data model for Weblate translation contributor information.
//
import Foundation
/// An aggregated translation contributor from Weblate.
struct TranslationContributor: Identifiable, Sendable {
let gravatarHash: String
let username: String
let fullName: String
/// Per-language contribution counts
let languageContributions: [String: Int]
var id: String { gravatarHash }
var totalContributions: Int {
languageContributions.values.reduce(0, +)
}
var displayName: String {
fullName.isEmpty ? username : fullName
}
var gravatarURL: URL? {
URL(string: "https://www.gravatar.com/avatar/\(gravatarHash)?d=identicon&s=200")
}
/// Returns top languages with counts formatted as "Polish (530), German (355), ..."
func languageSummary(maxLanguages: Int = 3) -> String {
let sorted = languageContributions
.sorted { $0.value > $1.value }
.prefix(maxLanguages)
.map { "\($0.key) (\($0.value))" }
var result = sorted.joined(separator: ", ")
if languageContributions.count > maxLanguages {
result += ", ..."
}
return result
}
}