//! Strings for this page group. See `docs` in `super` for the pattern. use super::Lang; use std::fmt::Display; #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum K { // pulls_list.rs PrStateOpenLabel, PrStateMergedLabel, PrStateClosedLabel, StateOpen, StateMerged, StateClosed, ListStateNavLabel, NewPullRequest, SearchTitles, SortLabel, Search, FiltersApplied, ClearFilters, NoPullRequestsYet, NoPullRequestsMatch, SortNewest, SortOldest, SortUpdated, MetaBeforeTime, MetaAfterTime, Newer, Older, // pull_files.rs FinishReview, ReviewSummary, ReviewType, CommentChoice, ApproveChoice, RequestChangesChoice, SubmitReview, DiscardPending, // pull_branch.rs BranchErrProtected, BranchErrDefault, BranchErrMoved, BranchErrMissing, BranchErrNotAllowed, BranchPrefix, BranchWasDeleted, BranchStillHere, RestoreBranch, DeleteBranch, // compare.rs ComparingPrefix, Unrelated, NothingToCompare, Committed, BrowseFiles, OpenPullRequest, TitleLabel, DescriptionLabel, CreatePullRequest, AlreadyOpen, ViewIt, ArchivedNoPulls, CompareBranches, BasePrefix, HeadPrefix, BranchOrOwner, Compare, UnknownBranches, // Diff section subjects (pull_files.rs, compare.rs). ThisPullRequest, ThisComparison, } pub fn t(lang: Lang, key: K) -> &'static str { use K::*; use Lang::*; match (key, lang) { (PrStateOpenLabel, En) => "Open pull request", (PrStateOpenLabel, Tr) => "Açık çekme isteği", (PrStateMergedLabel, En) => "Merged pull request", (PrStateMergedLabel, Tr) => "Birleştirilmiş çekme isteği", (PrStateClosedLabel, En) => "Closed pull request", (PrStateClosedLabel, Tr) => "Kapatılmış çekme isteği", (StateOpen, En) => "Open", (StateOpen, Tr) => "Açık", (StateMerged, En) => "Merged", (StateMerged, Tr) => "Birleştirildi", (StateClosed, En) => "Closed", (StateClosed, Tr) => "Kapatıldı", (ListStateNavLabel, En) => "Pull requests by state", (ListStateNavLabel, Tr) => "Duruma göre çekme istekleri", (NewPullRequest, En) => "New pull request", (NewPullRequest, Tr) => "Yeni çekme isteği", (SearchTitles, En) => "Search titles", (SearchTitles, Tr) => "Başlıklarda ara", (SortLabel, En) => "Sort", (SortLabel, Tr) => "Sırala", (Search, En) => "Search", (Search, Tr) => "Ara", (FiltersApplied, En) => "Filters applied · ", (FiltersApplied, Tr) => "Filtreler uygulandı · ", (ClearFilters, En) => "Clear filters", (ClearFilters, Tr) => "Filtreleri temizle", (NoPullRequestsYet, En) => "No pull requests yet", (NoPullRequestsYet, Tr) => "Henüz çekme isteği yok", (NoPullRequestsMatch, En) => "No pull requests match these filters.", (NoPullRequestsMatch, Tr) => "Bu filtrelere uyan çekme isteği yok.", (SortNewest, En) => "Newest", (SortNewest, Tr) => "En yeni", (SortOldest, En) => "Oldest", (SortOldest, Tr) => "En eski", (SortUpdated, En) => "Recently updated", (SortUpdated, Tr) => "Son güncellenen", (MetaBeforeTime, En) => " opened ", (MetaBeforeTime, Tr) => " · ", (MetaAfterTime, En) => " by ", (MetaAfterTime, Tr) => " tarafından açıldı · ", (Newer, En) => "Newer", (Newer, Tr) => "Daha yeni", (Older, En) => "Older", (Older, Tr) => "Daha eski", (FinishReview, En) => "Finish your review", (FinishReview, Tr) => "İncelemeyi tamamla", (ReviewSummary, En) => "Review summary", (ReviewSummary, Tr) => "İnceleme özeti", (ReviewType, En) => "Review type", (ReviewType, Tr) => "İnceleme türü", (CommentChoice, En) => " Comment", (CommentChoice, Tr) => " Yorum", (ApproveChoice, En) => " Approve", (ApproveChoice, Tr) => " Onayla", (RequestChangesChoice, En) => " Request changes", (RequestChangesChoice, Tr) => " Değişiklik iste", (SubmitReview, En) => "Submit review", (SubmitReview, Tr) => "İncelemeyi gönder", (DiscardPending, En) => "Discard pending comments", (DiscardPending, Tr) => "Bekleyen yorumları sil", (BranchErrProtected, En) => "This branch is protected, so it cannot be deleted.", (BranchErrProtected, Tr) => "Bu dal korumalı olduğu için silinemez.", (BranchErrDefault, En) => "The default branch cannot be deleted.", (BranchErrDefault, Tr) => "Varsayılan dal silinemez.", (BranchErrMoved, En) => { "The branch has changed since this page loaded, or it already exists. Reload and try again." } (BranchErrMoved, Tr) => { "Dal, sayfa yüklendikten sonra değişti ya da zaten var. Sayfayı yenileyip tekrar deneyin." } (BranchErrMissing, En) => "The branch or its commit is missing, so it cannot be changed.", (BranchErrMissing, Tr) => "Dal ya da commit'i eksik olduğu için değiştirilemez.", (BranchErrNotAllowed, En) => { "A branch can only be deleted or restored once its pull request is merged or closed." } (BranchErrNotAllowed, Tr) => { "Bir dal, çekme isteği birleştirildikten ya da kapatıldıktan sonra silinebilir veya geri yüklenebilir." } (BranchPrefix, En) => "The branch ", (BranchPrefix, Tr) => "Dal ", (BranchWasDeleted, En) => " was deleted.", (BranchWasDeleted, Tr) => " silindi.", (BranchStillHere, En) => " is still here.", (BranchStillHere, Tr) => " hâlâ duruyor.", (RestoreBranch, En) => "Restore branch", (RestoreBranch, Tr) => "Dalı geri yükle", (DeleteBranch, En) => "Delete branch", (DeleteBranch, Tr) => "Dalı sil", (ComparingPrefix, En) => "Comparing ", (ComparingPrefix, Tr) => "Karşılaştırma: ", (Unrelated, En) => "base and head have entirely different histories", (Unrelated, Tr) => "base ve head'in geçmişleri tamamen farklı.", (NothingToCompare, En) => "There isn't anything to compare.", (NothingToCompare, Tr) => "Karşılaştırılacak bir şey yok.", (Committed, En) => "committed", (Committed, Tr) => "commit etti", (BrowseFiles, En) => "Browse files", (BrowseFiles, Tr) => "Dosyalara göz at", (OpenPullRequest, En) => "Open a pull request", (OpenPullRequest, Tr) => "Çekme isteği aç", (TitleLabel, En) => "Title ", (TitleLabel, Tr) => "Başlık ", (DescriptionLabel, En) => "Description", (DescriptionLabel, Tr) => "Açıklama", (CreatePullRequest, En) => "Create pull request", (CreatePullRequest, Tr) => "Çekme isteği oluştur", (AlreadyOpen, En) => "A pull request is already open for this comparison: ", (AlreadyOpen, Tr) => "Bu karşılaştırma için zaten açık bir çekme isteği var. ", (ViewIt, En) => "view it", (ViewIt, Tr) => "Görüntüle", (ArchivedNoPulls, En) => "This repository is archived, so pull requests can't be opened.", (ArchivedNoPulls, Tr) => "Bu depo arşivlendiği için çekme isteği açılamaz.", (CompareBranches, En) => "Compare branches", (CompareBranches, Tr) => "Dalları karşılaştır", (BasePrefix, En) => "Base ", (BasePrefix, Tr) => "Base ", (HeadPrefix, En) => "Head ", (HeadPrefix, Tr) => "Head ", (BranchOrOwner, En) => "branch or owner:branch", (BranchOrOwner, Tr) => "dal veya owner:branch", (Compare, En) => "Compare", (Compare, Tr) => "Karşılaştır", (UnknownBranches, En) => "unknown base or head branch", (UnknownBranches, Tr) => "bilinmeyen base veya head dalı", (ThisPullRequest, En) => "this pull request", (ThisPullRequest, Tr) => "bu çekme isteği", (ThisComparison, En) => "this comparison", (ThisComparison, Tr) => "bu karşılaştırma", } } /// "3 comments" / "1 comment", and "3 yorum" in Turkish. pub fn comments(lang: Lang, count: i64) -> String { match lang { Lang::En => format!("{count} comment{}", if count == 1 { "" } else { "s" }), Lang::Tr => format!("{count} yorum"), } } /// "1 commit" / "3 commits". Turkish keeps the English word "commit". pub fn commit_count(lang: Lang, count: usize) -> String { match lang { Lang::En => format!("{count} commit{}", if count == 1 { "" } else { "s" }), Lang::Tr => format!("{count} commit"), } } /// The review bar's pending comment line. pub fn pending_comments(lang: Lang, count: usize) -> String { match (lang, count) { (Lang::En, 0) => "No pending comments.".to_owned(), (Lang::En, 1) => "1 pending comment.".to_owned(), (Lang::En, n) => format!("{n} pending comments."), (Lang::Tr, 0) => "Bekleyen yorum yok.".to_owned(), (Lang::Tr, n) => format!("{n} bekleyen yorum."), } } /// The "Open N" state tab on the list. pub fn tab_open(lang: Lang, count: impl Display) -> String { match lang { Lang::En => format!("Open {count}"), Lang::Tr => format!("Açık {count}"), } } /// The "Closed N" state tab on the list. pub fn tab_closed(lang: Lang, count: impl Display) -> String { match lang { Lang::En => format!("Closed {count}"), Lang::Tr => format!("Kapalı {count}"), } } /// The "All N" state tab on the list. pub fn tab_all(lang: Lang, count: impl Display) -> String { match lang { Lang::En => format!("All {count}"), Lang::Tr => format!("Tümü {count}"), } } /// The pager's "Page N" label. pub fn page_number(lang: Lang, page: impl Display) -> String { match lang { Lang::En => format!("Page {page}"), Lang::Tr => format!("Sayfa {page}"), } } /// The browser title of the pull request list. pub fn list_title(lang: Lang, owner: &str, repo: &str) -> String { match lang { Lang::En => format!("{owner}/{repo} \u{b7} Pull requests"), Lang::Tr => format!("{owner}/{repo} \u{b7} Çekme istekleri"), } } #[cfg(test)] mod tests { use super::*; const ALL: &[K] = &[ K::PrStateOpenLabel, K::PrStateMergedLabel, K::PrStateClosedLabel, K::StateOpen, K::StateMerged, K::StateClosed, K::ListStateNavLabel, K::NewPullRequest, K::SearchTitles, K::SortLabel, K::Search, K::FiltersApplied, K::ClearFilters, K::NoPullRequestsYet, K::NoPullRequestsMatch, K::SortNewest, K::SortOldest, K::SortUpdated, K::MetaBeforeTime, K::MetaAfterTime, K::Newer, K::Older, K::FinishReview, K::ReviewSummary, K::ReviewType, K::CommentChoice, K::ApproveChoice, K::RequestChangesChoice, K::SubmitReview, K::DiscardPending, K::BranchErrProtected, K::BranchErrDefault, K::BranchErrMoved, K::BranchErrMissing, K::BranchErrNotAllowed, K::BranchPrefix, K::BranchWasDeleted, K::BranchStillHere, K::RestoreBranch, K::DeleteBranch, K::ComparingPrefix, K::Unrelated, K::NothingToCompare, K::Committed, K::BrowseFiles, K::OpenPullRequest, K::TitleLabel, K::DescriptionLabel, K::CreatePullRequest, K::AlreadyOpen, K::ViewIt, K::ArchivedNoPulls, K::CompareBranches, K::BasePrefix, K::HeadPrefix, K::BranchOrOwner, K::Compare, K::UnknownBranches, K::ThisPullRequest, K::ThisComparison, ]; #[test] fn every_key_has_both_languages() { let mut differing = 0; for &key in ALL { let en = t(Lang::En, key); let tr = t(Lang::Tr, key); assert!(!en.is_empty(), "{key:?} has an empty English string"); assert!(!tr.is_empty(), "{key:?} has an empty Turkish string"); if en != tr { differing += 1; } } assert!(differing >= 3); } #[test] fn counted_strings_match_english() { assert_eq!(comments(Lang::En, 1), "1 comment"); assert_eq!(comments(Lang::En, 3), "3 comments"); assert_eq!(comments(Lang::Tr, 3), "3 yorum"); assert_eq!(commit_count(Lang::En, 1), "1 commit"); assert_eq!(commit_count(Lang::En, 2), "2 commits"); assert_eq!(pending_comments(Lang::En, 0), "No pending comments."); assert_eq!(pending_comments(Lang::Tr, 2), "2 bekleyen yorum."); assert_eq!(tab_open(Lang::En, 2), "Open 2"); assert_eq!(tab_open(Lang::Tr, 2), "Açık 2"); assert_eq!(page_number(Lang::Tr, 4), "Sayfa 4"); assert_eq!(list_title(Lang::En, "a", "b"), "a/b \u{b7} Pull requests"); } }