//! Strings for this page group. See `docs` in `super` for the pattern. use super::Lang; #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum K { Accept, AcceptTransfer, AddCollaboratorButton, AddCollaboratorHeading, AddCollaboratorHelp, AddOrUpdate, AddOrUpdateRule, AllowDeletion, AllowForcePush, AlreadyOwner, ApprovalsHelp, ApprovalsRange, ArchiveHeading, ArchiveHelp, ArchiveRepo, ArchivedHelp, ArchivedSecrets, BadForm, BlockWhileChanges, BranchMissing, BranchPattern, BranchProtection, BranchProtectionHelp, BranchRuleRemoved, BranchRuleSaved, BuiltinRowText, CancelTransfer, ChangeVisibility, CollabAdded, CollabRemoved, Collaborators, CollaboratorsHelp, ColUser, DangerZone, Decline, DeclineTransfer, DefaultBranch, DefaultBranchFailed, Delete, DeleteRepo, DeleteRepoHelp, DeleteTrashHelp, DeletionAllowed, Description, DescriptionHelp, DescriptionLong, EnterUsername, EnterValue, ForcePushAllowed, General, GeneralSaved, IUnderstand, InvalidRole, LastUpdated, MergePushRules, Mirrors, Name, NameRule, NewName, NewOwnerLabel, NoBranchesYet, NoCollaborators, NoPendingTransfer, NoRule, NoSecrets, NotCollaborator, OwnerIsMember, PatternColumn, PatternHelpA, PatternHelpB, PatternHelpC, PatternHelpD, PendingTransfers, PrivateOption, PublicOption, Remove, RenameHelp, RenameRepo, RenameTransferNav, RenamedNotice, RepoArchived, RepoDeletedAfter, RepoDeletedBefore, RepoTransfers, RepoUnarchived, RequireUpToDate, RequiredApprovals, RestrictPush, Role, RoleAdminDesc, RoleMaintainDesc, RoleReadDesc, Roles, RoleTriageDesc, RoleUpdated, RoleWriteDesc, RuleChangesBlock, RuleRestrictPush, RuleUpToDate, SaveGeneral, SaveRole, SaveRule, SaveSecret, SecretDeleted, SecretLimits, SecretMissing, SecretSaved, Secrets, SecretsHelp, SettingsNavLabel, StartTransferLink, TransferHelp, TransferRepo, TransferTitle, TransferredNotice, TypeToConfirmAfter, TypeToConfirmBefore, UnarchiveRepo, UnderstandNeeded, UnknownUser, Username, Value, ValueTooLarge, VisibilityChanged, VisibilityHeading, VisibilityHelp, Webhooks, } pub fn t(lang: Lang, key: K) -> &'static str { use K::*; use Lang::*; match (key, lang) { (Accept, En) => "Accept", (Accept, Tr) => "Kabul et", (AcceptTransfer, En) => "Accept transfer", (AcceptTransfer, Tr) => "Devri kabul et", (AddCollaboratorButton, En) => "Add collaborator", (AddCollaboratorButton, Tr) => "Ortak çalışan ekle", (AddCollaboratorHeading, En) => "Add a collaborator", (AddCollaboratorHeading, Tr) => "Ortak çalışan ekle", (AddCollaboratorHelp, En) => { "Adding a user who is already a collaborator updates their role. The owner cannot be added." } (AddCollaboratorHelp, Tr) => { "Zaten ortak çalışan olan bir kullanıcıyı eklemek rolünü günceller. Sahip eklenemez." } (AddOrUpdate, En) => "Add or update a secret", (AddOrUpdate, Tr) => "Gizli anahtar ekle veya güncelle", (AddOrUpdateRule, En) => "Add or update a rule", (AddOrUpdateRule, Tr) => "Kural ekle veya güncelle", (AllowDeletion, En) => "Allow deletion", (AllowDeletion, Tr) => "Silmeye izin verilir", (AllowForcePush, En) => "Allow force pushes", (AllowForcePush, Tr) => "Zorla göndermeye izin verilir", (AlreadyOwner, En) => "The repository already belongs to that user.", (AlreadyOwner, Tr) => "Depo zaten bu kullanıcıya ait.", (ApprovalsHelp, En) => { "Approvals count only from reviewers with Write access or higher, using each reviewer's latest review." } (ApprovalsHelp, Tr) => { "Onaylar yalnızca yazma veya daha yüksek erişimi olan inceleyicilerden, her inceleyicinin en son incelemesine göre sayılır." } (ApprovalsRange, En) => "required approvals must be a whole number from 0 to 20", (ApprovalsRange, Tr) => "Gerekli onay sayısı 0 ile 20 arasında bir tam sayı olmalıdır.", (ArchiveHeading, En) => "Archive", (ArchiveHeading, Tr) => "Arşiv", (ArchiveHelp, En) => { "Archiving makes the repository read-only: pushes are refused, and issues, labels and milestones cannot change. You can unarchive it at any time." } (ArchiveHelp, Tr) => { "Arşivleme depoyu salt okunur yapar: gönderimler reddedilir; sorunlar, etiketler ve kilometre taşları değiştirilemez. Arşivden istediğiniz zaman çıkarabilirsiniz." } (ArchiveRepo, En) => "Archive repository", (ArchiveRepo, Tr) => "Depoyu arşivle", (ArchivedHelp, En) => { "This repository is archived. Pushes are refused, and issues, labels and milestones are read-only. Unarchive it to allow changes again." } (ArchivedHelp, Tr) => { "Bu depo arşivlenmiş. Gönderimler reddedilir; sorunlar, etiketler ve kilometre taşları salt okunurdur. Yeniden değişiklik yapmak için arşivden çıkarın." } (ArchivedSecrets, En) => "This repository is archived. Secrets are read-only.", (ArchivedSecrets, Tr) => "Bu depo arşivlenmiş. Gizli anahtarlar salt okunurdur.", (BadForm, En) => "The form was not understood. Nothing was changed.", (BadForm, Tr) => "Form anlaşılamadı. Hiçbir şey değiştirilmedi.", (BlockWhileChanges, En) => "Block merges while changes are requested", (BlockWhileChanges, Tr) => "Değişiklik istenirken birleştirmeler engellenir", (BranchMissing, En) => "That branch does not exist. Nothing was saved.", (BranchMissing, Tr) => "Bu dal mevcut değil. Hiçbir şey kaydedilmedi.", (BranchPattern, En) => "Branch pattern", (BranchPattern, Tr) => "Dal deseni", (BranchProtection, En) => "Branch protection", (BranchProtection, Tr) => "Dal koruması", (BranchProtectionHelp, En) => { "Pushes to a protected branch are checked before they are accepted. Force pushes and deletions are blocked on the default branch unless a rule allows them. Tags are not covered." } (BranchProtectionHelp, Tr) => { "Korumalı bir dala yapılan gönderimler kabul edilmeden önce denetlenir. Bir kural izin vermedikçe varsayılan dalda zorla gönderimler ve silmeler engellenir. Etiketler kapsam dışındadır." } (BranchRuleRemoved, En) => "Branch rule removed.", (BranchRuleRemoved, Tr) => "Dal kuralı kaldırıldı.", (BranchRuleSaved, En) => "Branch rule saved.", (BranchRuleSaved, Tr) => "Dal kuralı kaydedildi.", (BuiltinRowText, En) => { " (default branch): protected by default; add a rule for it to change this." } (BuiltinRowText, Tr) => { " (varsayılan dal): varsayılan olarak korunur; bunu değiştirmek için bir kural ekleyin." } (CancelTransfer, En) => "Cancel transfer", (CancelTransfer, Tr) => "Devri iptal et", (ChangeVisibility, En) => "Change visibility", (ChangeVisibility, Tr) => "Görünürlüğü değiştir", (CollabAdded, En) => "Collaborator added.", (CollabAdded, Tr) => "Ortak çalışan eklendi.", (CollabRemoved, En) => "Collaborator removed.", (CollabRemoved, Tr) => "Ortak çalışan kaldırıldı.", (Collaborators, En) => "Collaborators", (Collaborators, Tr) => "Ortak çalışanlar", (CollaboratorsHelp, En) => { "Collaborators get access to this repo beyond its visibility. On a private repo, adding a collaborator makes it visible to them." } (CollaboratorsHelp, Tr) => { "Ortak çalışanlar, deponun görünürlüğünden bağımsız olarak bu depoya erişim alır. Özel bir depoda ortak çalışan eklemek depoyu onlara görünür kılar." } (ColUser, En) => "User", (ColUser, Tr) => "Kullanıcı", (DangerZone, En) => "Danger zone", (DangerZone, Tr) => "Tehlikeli bölge", (Decline, En) => "Decline", (Decline, Tr) => "Reddet", (DeclineTransfer, En) => "Decline transfer", (DeclineTransfer, Tr) => "Devri reddet", (DefaultBranch, En) => "Default branch", (DefaultBranch, Tr) => "Varsayılan dal", (DefaultBranchFailed, En) => "The default branch could not be changed. Nothing was saved.", (DefaultBranchFailed, Tr) => "Varsayılan dal değiştirilemedi. Hiçbir şey kaydedilmedi.", (Delete, En) => "Delete", (Delete, Tr) => "Sil", (DeleteRepo, En) => "Delete repository", (DeleteRepo, Tr) => "Depoyu sil", (DeleteRepoHelp, En) => { "Deleting a repository removes it from the forge. Its branches, tags, collaborators and push history stop being served." } (DeleteRepoHelp, Tr) => { "Bir depoyu silmek onu forge üzerinden kaldırır. Dalları, etiketleri, ortak çalışanları ve gönderim geçmişi artık sunulmaz." } (DeleteTrashHelp, En) => { "The bare repository is moved to the instance trash, not erased. Until an administrator purges it, it can be recovered by cloning from the trash directory." } (DeleteTrashHelp, Tr) => { "Çıplak depo silinmez, sunucunun çöp klasörüne taşınır. Bir yönetici kalıcı olarak temizleyene kadar çöp klasöründen klonlanarak kurtarılabilir." } (DeletionAllowed, En) => "Deletion allowed", (DeletionAllowed, Tr) => "Silmeye izin var", (Description, En) => "Description", (Description, Tr) => "Açıklama", (DescriptionHelp, En) => { "Up to 350 characters, on one line. It is shown under the repository name." } (DescriptionHelp, Tr) => { "En fazla 350 karakter, tek satır. Depo adının altında gösterilir." } (DescriptionLong, En) => { "The description can be at most 350 characters. Nothing was saved." } (DescriptionLong, Tr) => { "Açıklama en fazla 350 karakter olabilir. Hiçbir şey kaydedilmedi." } (EnterUsername, En) => "Enter a username.", (EnterUsername, Tr) => "Bir kullanıcı adı girin.", (EnterValue, En) => "Enter a value.", (EnterValue, Tr) => "Bir değer girin.", (ForcePushAllowed, En) => "Force push allowed", (ForcePushAllowed, Tr) => "Zorla gönderime izin var", (General, En) => "General", (General, Tr) => "Genel", (GeneralSaved, En) => "General settings saved.", (GeneralSaved, Tr) => "Genel ayarlar kaydedildi.", (IUnderstand, En) => "I understand", (IUnderstand, Tr) => "Anlıyorum", (InvalidRole, En) => "Choose a valid role.", (InvalidRole, Tr) => "Geçerli bir rol seçin.", (LastUpdated, En) => "Last updated", (LastUpdated, Tr) => "Son güncelleme", (MergePushRules, En) => "Merge and push rules", (MergePushRules, Tr) => "Birleştirme ve gönderme kuralları", (Mirrors, En) => "Mirrors", (Mirrors, Tr) => "Yansılar", (Name, En) => "Name", (Name, Tr) => "Ad", (NameRule, En) => { "Names are 1 to 64 characters: capital letters, digits and underscores, and they cannot start with a digit." } (NameRule, Tr) => { "Adlar 1 ile 64 karakter arasında olmalıdır: büyük harf, rakam ve alt çizgi kullanılabilir; rakamla başlayamaz." } (NewName, En) => "New name", (NewName, Tr) => "Yeni ad", (NewOwnerLabel, En) => "New owner (username)", (NewOwnerLabel, Tr) => "Yeni sahip (kullanıcı adı)", (NoBranchesYet, En) => { "No branches yet. The default branch can be chosen after the first push." } (NoBranchesYet, Tr) => "Henüz dal yok. Varsayılan dal, ilk gönderimden sonra seçilebilir.", (NoCollaborators, En) => "No collaborators yet. Add one below.", (NoCollaborators, Tr) => "Henüz ortak çalışan yok. Aşağıdan bir ortak çalışan ekleyin.", (NoPendingTransfer, En) => "No transfer is pending for this repository.", (NoPendingTransfer, Tr) => "Bu depo için bekleyen bir devir yok.", (NoRule, En) => "none", (NoRule, Tr) => "yok", (NoSecrets, En) => "No secrets yet.", (NoSecrets, Tr) => "Henüz gizli anahtar yok.", (NotCollaborator, En) => "That user is not a collaborator on this repo.", (NotCollaborator, Tr) => "Bu kullanıcı bu deponun ortak çalışanı değil.", (OwnerIsMember, En) => { "The repo owner is already a member with full access and cannot be added as a collaborator." } (OwnerIsMember, Tr) => { "Depo sahibi zaten tam erişimli bir üyedir ve ortak çalışan olarak eklenemez." } (PatternColumn, En) => "Pattern", (PatternColumn, Tr) => "Desen", (PatternHelpA, En) => "A branch name, or a pattern: ", (PatternHelpA, Tr) => "Bir dal adı veya desen: ", (PatternHelpB, En) => " matches within one path segment and ", (PatternHelpB, Tr) => " tek yol parçası içinde eşleşir, ", (PatternHelpC, En) => " matches across ", (PatternHelpC, Tr) => " ise ", (PatternHelpD, En) => ". Saving an existing pattern updates its rule.", (PatternHelpD, Tr) => { " işaretini de aşarak eşleşir. Var olan bir deseni kaydetmek, kuralını günceller." } (PendingTransfers, En) => "Pending transfers", (PendingTransfers, Tr) => "Bekleyen devirler", (PrivateOption, En) => { "Private: only its owner, collaborators and instance admins can see it. Others get a 404." } (PrivateOption, Tr) => { "Özel: yalnızca sahibi, ortak çalışanları ve sunucu yöneticileri görebilir. Diğerleri 404 hatası alır." } (PublicOption, En) => "Public: anyone can read it", (PublicOption, Tr) => "Herkese açık: herkes okuyabilir", (Remove, En) => "Remove", (Remove, Tr) => "Kaldır", (RenameHelp, En) => { "Letters, digits, '.', '_' and '-'. The old name keeps working: its web and clone URLs redirect to the new name." } (RenameHelp, Tr) => { "Harfler, rakamlar, '.', '_' ve '-' kullanılabilir. Eski ad çalışmaya devam eder: web ve klonlama adresleri yeni ada yönlendirilir." } (RenameRepo, En) => "Rename repository", (RenameRepo, Tr) => "Depoyu yeniden adlandır", (RenameTransferNav, En) => "Rename & transfer", (RenameTransferNav, Tr) => "Yeniden adlandır ve devret", (RenamedNotice, En) => "Repository renamed. The old name redirects to the new one.", (RenamedNotice, Tr) => "Depo yeniden adlandırıldı. Eski ad yeni ada yönlendirir.", (RepoArchived, En) => "Repository archived.", (RepoArchived, Tr) => "Depo arşivlendi.", (RepoDeletedAfter, En) => " deleted.", (RepoDeletedAfter, Tr) => " silindi.", (RepoDeletedBefore, En) => "Repository ", (RepoDeletedBefore, Tr) => "Depo ", (RepoTransfers, En) => "Repository transfers", (RepoTransfers, Tr) => "Depo devirleri", (RepoUnarchived, En) => "Repository unarchived.", (RepoUnarchived, Tr) => "Depo arşivden çıkarıldı.", (RequireUpToDate, En) => "Require the pull request head to contain the latest base branch", (RequireUpToDate, Tr) => { "Çekme isteğinin kaynak dalı, hedef dalın en son hâlini içermelidir" } (RequiredApprovals, En) => "Required approvals (0 to 20)", (RequiredApprovals, Tr) => "Gerekli onay sayısı (0 ile 20 arası)", (RestrictPush, En) => { "Only accept changes through pull requests (direct pushes are limited to repo admins)" } (RestrictPush, Tr) => { "Değişiklikler yalnızca çekme istekleri üzerinden kabul edilir (doğrudan gönderimler depo yöneticileriyle sınırlıdır)" } (Role, En) => "Role", (Role, Tr) => "Rol", (RoleAdminDesc, En) => "full repo settings except delete and transfer", (RoleAdminDesc, Tr) => "silme ve devir dışında tüm depo ayarları", (RoleMaintainDesc, En) => "push and manage issues/settings without destructive actions", (RoleMaintainDesc, Tr) => "yıkıcı işlemler dışında gönderme, sorunları ve ayarları yönetme", (RoleReadDesc, En) => "view and clone", (RoleReadDesc, Tr) => "görüntüleme ve klonlama", (Roles, En) => "Roles", (Roles, Tr) => "Roller", (RoleTriageDesc, En) => "manage issues", (RoleTriageDesc, Tr) => "sorunları yönetme", (RoleUpdated, En) => "Role updated.", (RoleUpdated, Tr) => "Rol güncellendi.", (RoleWriteDesc, En) => "push", (RoleWriteDesc, Tr) => "gönderme (push)", (RuleChangesBlock, En) => "changes requested block merges", (RuleChangesBlock, Tr) => "değişiklik istenmesi birleştirmeyi engeller", (RuleRestrictPush, En) => "direct pushes limited to admins", (RuleRestrictPush, Tr) => "doğrudan gönderimler yöneticilerle sınırlı", (RuleUpToDate, En) => "head must be up to date with base", (RuleUpToDate, Tr) => "kaynak dal, hedef dalın güncel hâlini içermelidir", (SaveGeneral, En) => "Save general settings", (SaveGeneral, Tr) => "Genel ayarları kaydet", (SaveRole, En) => "Save", (SaveRole, Tr) => "Kaydet", (SaveRule, En) => "Save rule", (SaveRule, Tr) => "Kuralı kaydet", (SaveSecret, En) => "Save secret", (SaveSecret, Tr) => "Gizli anahtarı kaydet", (SecretDeleted, En) => "Secret deleted.", (SecretDeleted, Tr) => "Gizli anahtar silindi.", (SecretLimits, En) => "Up to 48 KiB. Names are capital letters, digits and underscores.", (SecretLimits, Tr) => "En fazla 48 KiB. Adlar büyük harf, rakam ve alt çizgiden oluşur.", (SecretMissing, En) => "No secret has that name. Nothing was deleted.", (SecretMissing, Tr) => "Bu adda bir gizli anahtar yok. Hiçbir şey silinmedi.", (SecretSaved, En) => "Secret saved. Its value is not shown again.", (SecretSaved, Tr) => "Gizli anahtar kaydedildi. Değeri bir daha gösterilmez.", (Secrets, En) => "Secrets", (Secrets, Tr) => "Gizli anahtarlar", (SecretsHelp, En) => { "Secrets are passed to CI jobs of this repository as environment variables. Values are write-only: once saved, they cannot be read back, and updating a secret replaces its value." } (SecretsHelp, Tr) => { "Gizli anahtarlar, bu deponun CI işlerine ortam değişkeni olarak aktarılır. Değerler yalnızca yazılabilir: kaydedildikten sonra geri okunamazlar ve bir gizli anahtarı güncellemek değerini değiştirir." } (SettingsNavLabel, En) => "Settings", (SettingsNavLabel, Tr) => "Ayarlar", (StartTransferLink, En) => "Start or change a transfer in the settings", (StartTransferLink, Tr) => "Ayarlarda devir başlatın veya değiştirin", (TransferHelp, En) => { "Offers the repository to another user, or to an organization you own, keeping its name. The target has 7 days to accept; an instance admin's transfer happens at once. Collaborator rows stay, except the new owner's, which is removed. The old owner and name redirect to the new location. " } (TransferHelp, Tr) => { "Depoyu, adını koruyarak başka bir kullanıcıya ya da sahibi olduğunuz bir kuruluşa devreder. Hedefin kabul etmesi için 7 günü vardır; sunucu yöneticisinin devri hemen gerçekleşir. Ortak çalışan kayıtları korunur, yalnızca yeni sahibinin kaydı kaldırılır. Eski sahibi ve adı yeni konuma yönlendirilir. " } (TransferRepo, En) => "Transfer repository", (TransferRepo, Tr) => "Depoyu devret", (TransferTitle, En) => "Transfer", (TransferTitle, Tr) => "Devir", (TransferredNotice, En) => { "Repository transferred. The old owner and name redirect to the new location." } (TransferredNotice, Tr) => "Depo devredildi. Eski sahibi ve adı yeni konuma yönlendirilir.", (TypeToConfirmAfter, En) => " to confirm", (TypeToConfirmAfter, Tr) => " yazın", (TypeToConfirmBefore, En) => "Type ", (TypeToConfirmBefore, Tr) => "Onaylamak için ", (UnarchiveRepo, En) => "Unarchive repository", (UnarchiveRepo, Tr) => "Depoyu arşivden çıkar", (UnderstandNeeded, En) => { "To change the visibility, tick I understand. Nothing was changed." } (UnderstandNeeded, Tr) => { "Görünürlüğü değiştirmek için \"Anlıyorum\" kutusunu işaretleyin. Hiçbir şey değiştirilmedi." } (UnknownUser, En) => "No user has that username.", (UnknownUser, Tr) => "Bu kullanıcı adına sahip bir kullanıcı yok.", (Username, En) => "Username", (Username, Tr) => "Kullanıcı adı", (Value, En) => "Value", (Value, Tr) => "Değer", (ValueTooLarge, En) => "The value is larger than 48 KiB. Nothing was saved.", (ValueTooLarge, Tr) => "Değer 48 KiB'tan büyük. Hiçbir şey kaydedilmedi.", (VisibilityChanged, En) => "Visibility changed.", (VisibilityChanged, Tr) => "Görünürlük değiştirildi.", (VisibilityHeading, En) => "Visibility", (VisibilityHeading, Tr) => "Görünürlük", (VisibilityHelp, En) => { "Tick I understand to change the visibility. The change takes effect at once." } (VisibilityHelp, Tr) => { "Görünürlüğü değiştirmek için \"Anlıyorum\" kutusunu işaretleyin. Değişiklik hemen geçerli olur." } (Webhooks, En) => "Webhooks", (Webhooks, Tr) => "Web kancaları", } } /// The page title of the rename and transfer page. pub fn page_title(lang: Lang, title: &str) -> String { match lang { Lang::En => format!("{title} \u{b7} Rename or transfer"), Lang::Tr => format!("{title} \u{b7} Yeniden adlandır veya devret"), } } /// The page title of the transfer status page. pub fn transfer_page_title(lang: Lang, title: &str) -> String { match lang { Lang::En => format!("{title} \u{b7} Transfer"), Lang::Tr => format!("{title} \u{b7} Devir"), } } /// The page title of the collaborators page. pub fn collaborators_page_title(lang: Lang, title: &str) -> String { match lang { Lang::En => format!("{title} \u{b7} Collaborators"), Lang::Tr => format!("{title} \u{b7} Ortak çalışanlar"), } } /// The page title of the CI secrets page. pub fn secrets_page_title(lang: Lang, title: &str) -> String { match lang { Lang::En => format!("{title} \u{b7} Secrets"), Lang::Tr => format!("{title} \u{b7} Gizli anahtarlar"), } } /// The page title of the repo settings page. pub fn settings_page_title(lang: Lang, title: &str) -> String { match lang { Lang::En => format!("{title} \u{b7} Settings"), Lang::Tr => format!("{title} \u{b7} Ayarlar"), } } /// The error for a rename whose name has characters outside the allowed set. pub fn invalid_name(lang: Lang, name: &str) -> String { match lang { Lang::En => format!("{name:?}: only A-Z, a-z, 0-9, '.', '_' and '-' are allowed"), Lang::Tr => format!("{name:?}: yalnızca A-Z, a-z, 0-9, '.', '_' ve '-' kullanılabilir."), } } /// The error for a transfer whose confirmation text does not match the repo name. pub fn confirm_mismatch(lang: Lang, title: &str) -> String { match lang { Lang::En => format!("Type {title} exactly to confirm the transfer."), Lang::Tr => format!("Devri onaylamak için {title} adını tam olarak yazın."), } } /// The error for a delete whose confirmation text does not match the repo name. pub fn confirm_delete_mismatch(lang: Lang, title: &str) -> String { match lang { Lang::En => format!("Type {title} exactly to confirm the deletion."), Lang::Tr => format!("Silmeyi onaylamak için {title} adını tam olarak yazın."), } } /// The error for a transfer to a user name that does not exist. pub fn no_such_user(lang: Lang, name: &str) -> String { match lang { Lang::En => format!("No user named {name}."), Lang::Tr => format!("{name} adında bir kullanıcı yok."), } } /// The error for a transfer to an organization whose owners the viewer is not. pub fn only_org_owner(lang: Lang, org: &str) -> String { match lang { Lang::En => format!("Only an owner of {org} can take a repository for it."), Lang::Tr => format!("Bir depoyu yalnızca {org} kuruluşunun sahipleri devralabilir."), } } /// One line about an open transfer on the repo page. pub fn transfer_summary( lang: Lang, to_is_org: bool, to_name: &str, started_by: &str, expires_on: &str, ) -> String { match lang { Lang::En => { let target = if to_is_org { format!("the organization {to_name}") } else { to_name.to_owned() }; format!( "Pending transfer to {target}, started by {started_by}. It expires on {expires_on} unless accepted." ) } Lang::Tr => { let target = if to_is_org { format!("{to_name} kuruluşu") } else { format!("{to_name} kullanıcısı") }; format!( "{target} için bekleyen devir, {started_by} tarafından başlatıldı. Kabul edilmezse {expires_on} tarihinde sona erer." ) } } } /// One inbox line: a repo offered to a user by someone. pub fn inbox_line(lang: Lang, from_owner: &str, repo: &str, to_owner: &str, by: &str) -> String { match lang { Lang::En => format!("{from_owner}/{repo} is offered to {to_owner}, by {by}"), Lang::Tr => format!( "{from_owner}/{repo}, {by} tarafından {to_owner} kullanıcısına devredilmek üzere sunuldu." ), } } /// The label of a role select for one collaborator. pub fn role_for(lang: Lang, username: &str) -> String { match lang { Lang::En => format!("Role for {username}"), Lang::Tr => format!("{username} için rol"), } } /// `yes` or `no` for a rule column. pub fn yes_no(lang: Lang, value: bool) -> &'static str { match (lang, value) { (Lang::En, true) => "yes", (Lang::En, false) => "no", (Lang::Tr, true) => "evet", (Lang::Tr, false) => "hayır", } } /// The number of required approvals in a rule summary. pub fn approvals_count(lang: Lang, n: u32) -> String { match lang { Lang::En => format!("{n} required approval{}", if n == 1 { "" } else { "s" }), Lang::Tr => format!("{n} gerekli onay"), } } #[cfg(test)] mod tests { use super::*; const ALL: &[K] = &[ K::Accept, K::AcceptTransfer, K::AddCollaboratorButton, K::AddCollaboratorHeading, K::AddCollaboratorHelp, K::AddOrUpdate, K::AddOrUpdateRule, K::AllowDeletion, K::AllowForcePush, K::AlreadyOwner, K::ApprovalsHelp, K::ApprovalsRange, K::ArchiveHeading, K::ArchiveHelp, K::ArchiveRepo, K::ArchivedHelp, K::ArchivedSecrets, K::BadForm, K::BlockWhileChanges, K::BranchMissing, K::BranchPattern, K::BranchProtection, K::BranchProtectionHelp, K::BranchRuleRemoved, K::BranchRuleSaved, K::BuiltinRowText, K::CancelTransfer, K::ChangeVisibility, K::CollabAdded, K::CollabRemoved, K::Collaborators, K::CollaboratorsHelp, K::ColUser, K::DangerZone, K::Decline, K::DeclineTransfer, K::DefaultBranch, K::DefaultBranchFailed, K::Delete, K::DeleteRepo, K::DeleteRepoHelp, K::DeleteTrashHelp, K::DeletionAllowed, K::Description, K::DescriptionHelp, K::DescriptionLong, K::EnterUsername, K::EnterValue, K::ForcePushAllowed, K::General, K::GeneralSaved, K::IUnderstand, K::InvalidRole, K::LastUpdated, K::MergePushRules, K::Mirrors, K::Name, K::NameRule, K::NewName, K::NewOwnerLabel, K::NoBranchesYet, K::NoCollaborators, K::NoPendingTransfer, K::NoRule, K::NoSecrets, K::NotCollaborator, K::OwnerIsMember, K::PatternColumn, K::PatternHelpA, K::PatternHelpB, K::PatternHelpC, K::PatternHelpD, K::PendingTransfers, K::PrivateOption, K::PublicOption, K::Remove, K::RenameHelp, K::RenameRepo, K::RenameTransferNav, K::RenamedNotice, K::RepoArchived, K::RepoDeletedAfter, K::RepoDeletedBefore, K::RepoTransfers, K::RepoUnarchived, K::RequireUpToDate, K::RequiredApprovals, K::RestrictPush, K::Role, K::RoleAdminDesc, K::RoleMaintainDesc, K::RoleReadDesc, K::Roles, K::RoleTriageDesc, K::RoleUpdated, K::RoleWriteDesc, K::RuleChangesBlock, K::RuleRestrictPush, K::RuleUpToDate, K::SaveGeneral, K::SaveRole, K::SaveRule, K::SaveSecret, K::SecretDeleted, K::SecretLimits, K::SecretMissing, K::SecretSaved, K::Secrets, K::SecretsHelp, K::SettingsNavLabel, K::StartTransferLink, K::TransferHelp, K::TransferRepo, K::TransferTitle, K::TransferredNotice, K::TypeToConfirmAfter, K::TypeToConfirmBefore, K::UnarchiveRepo, K::UnderstandNeeded, K::UnknownUser, K::Username, K::Value, K::ValueTooLarge, K::VisibilityChanged, K::VisibilityHeading, K::VisibilityHelp, K::Webhooks, ]; #[test] fn every_key_has_english_and_turkish() { for key in ALL { assert!(!t(Lang::En, *key).is_empty(), "{key:?} has no English"); assert!(!t(Lang::Tr, *key).is_empty(), "{key:?} has no Turkish"); } } #[test] fn turkish_differs_from_english() { let differing = ALL .iter() .filter(|key| t(Lang::En, **key) != t(Lang::Tr, **key)) .count(); assert!(differing >= 3, "only {differing} keys differ"); } }