forge
ExploreLog in

Tahinli/forge

public
0 watching
★ 0
15.7 KiB
1//! Strings for the pull request conversation, Files tab review threads and review routes.
2//! See `docs` in `super` for the pattern.
3
4use std::fmt::Display;
5
6use super::Lang;
7
8#[derive(Clone, Copy, Debug, PartialEq, Eq)]
9pub enum K {
10 StateMerged,
11 StateOpen,
12 StateClosed,
13 Unknown,
14 ByWantsToMerge,
15 ByInto,
16 ByFrom,
17 BylineEnd,
18 TabConversation,
19 PullPages,
20 MergeClean,
21 MergeConflict,
22 MergeUpToDate,
23 MergeChecking,
24 ReloadToCheck,
25 MergeStyleLegend,
26 StyleMergeCommit,
27 StyleSquash,
28 StyleFastForward,
29 MergeMessageLabel,
30 MergeButton,
31 MergedByPrefix,
32 MergedByMiddle,
33 MergedAsSep,
34 DismissButton,
35 ArchivedReadOnly,
36 LoginBefore,
37 LoginLink,
38 LoginAfter,
39 MergedCannotChange,
40 NoCommits,
41 Committed,
42 BrowseFiles,
43 ErrConflict,
44 ErrUpToDate,
45 ErrFfImpossible,
46 ErrBaseMoved,
47 ErrAlreadyMerged,
48 ErrNotOpen,
49 ErrHeadMissing,
50 ErrBaseMissing,
51 ErrNeedsApprovals,
52 ErrChangesRequested,
53 ErrNotUpToDate,
54 ErrMessageInvalid,
55 ReviewErrStale,
56 ReviewErrOwnPr,
57 ReviewErrEmpty,
58 ReviewErrInvalid,
59 ReviewErrBadLine,
60 ReviewErrClosed,
61 EditReviewComment,
62 CommentLabel,
63 SaveComment,
64 CancelButton,
65 Unresolve,
66 Resolve,
67 Outdated,
68 Pending,
69 ReplyLabel,
70 ReplyButton,
71 Edited,
72 EditLink,
73 DeleteButton,
74}
75
76pub fn t(lang: Lang, key: K) -> &'static str {
77 use K::*;
78 use Lang::{En, Tr};
79 match (key, lang) {
80 (StateMerged, En) => "Merged",
81 (StateMerged, Tr) => "Birleştirildi",
82 (StateOpen, En) => "Open",
83 (StateOpen, Tr) => "Açık",
84 (StateClosed, En) => "Closed",
85 (StateClosed, Tr) => "Kapalı",
86 (Unknown, En) => "unknown",
87 (Unknown, Tr) => "bilinmiyor",
88 (ByWantsToMerge, En) => " wants to merge ",
89 (ByWantsToMerge, Tr) => ", ",
90 (ByInto, En) => " into ",
91 (ByInto, Tr) => " dalına ",
92 (ByFrom, En) => " from ",
93 (ByFrom, Tr) => " dalından ",
94 (BylineEnd, En) => " · ",
95 (BylineEnd, Tr) => " birleştirmek istiyor · ",
96 (TabConversation, En) => "Conversation",
97 (TabConversation, Tr) => "Tartışma",
98 (PullPages, En) => "Pull request pages",
99 (PullPages, Tr) => "Çekme isteği sayfaları",
100 (MergeClean, En) => "This branch has no conflicts with the base branch",
101 (MergeClean, Tr) => "Bu dalın taban dalla çakışması yok",
102 (MergeConflict, En) => "This branch has conflicts that must be resolved",
103 (MergeConflict, Tr) => "Bu dalda çözülmesi gereken çakışmalar var",
104 (MergeUpToDate, En) => "This branch is already up to date with base",
105 (MergeUpToDate, Tr) => "Bu dal zaten taban dalla güncel",
106 (MergeChecking, En) => "Checking mergeability\u{2026}",
107 (MergeChecking, Tr) => "Birleştirilebilirlik kontrol ediliyor\u{2026}",
108 (ReloadToCheck, En) => "Reload to check again",
109 (ReloadToCheck, Tr) => "Yeniden kontrol etmek için sayfayı yenileyin",
110 (MergeStyleLegend, En) => "Merge style",
111 (MergeStyleLegend, Tr) => "Birleştirme yöntemi",
112 (StyleMergeCommit, En) => " Create a merge commit",
113 (StyleMergeCommit, Tr) => " Birleştirme commit’i oluştur",
114 (StyleSquash, En) => " Squash and merge",
115 (StyleSquash, Tr) => " Sıkıştır ve birleştir",
116 (StyleFastForward, En) => " Fast-forward",
117 (StyleFastForward, Tr) => " İleri sarma (fast-forward)",
118 (MergeMessageLabel, En) => "Merge commit message (optional)",
119 (MergeMessageLabel, Tr) => "Birleştirme commit mesajı (isteğe bağlı)",
120 (MergeButton, En) => "Merge pull request",
121 (MergeButton, Tr) => "Çekme isteğini birleştir",
122 (MergedByPrefix, En) => "Merged by ",
123 (MergedByPrefix, Tr) => "Birleştiren: ",
124 (MergedByMiddle, En) => " ",
125 (MergedByMiddle, Tr) => " · ",
126 (MergedAsSep, En) => " as ",
127 (MergedAsSep, Tr) => " · commit ",
128 (DismissButton, En) => "Dismiss",
129 (DismissButton, Tr) => "Yok say",
130 (ArchivedReadOnly, En) => {
131 "This repository is archived, so its pull requests are read-only."
132 }
133 (ArchivedReadOnly, Tr) => "Bu depo arşivlendiği için çekme istekleri salt okunurdur.",
134 (LoginBefore, En) => "",
135 (LoginBefore, Tr) => "Yorum yazmak için ",
136 (LoginLink, En) => "Log in",
137 (LoginLink, Tr) => "giriş yapın",
138 (LoginAfter, En) => " to comment.",
139 (LoginAfter, Tr) => ".",
140 (MergedCannotChange, En) => "A merged pull request cannot change state.",
141 (MergedCannotChange, Tr) => "Birleştirilmiş bir çekme isteğinin durumu değiştirilemez.",
142 (NoCommits, En) => "No commits.",
143 (NoCommits, Tr) => "Commit yok.",
144 (Committed, En) => "committed",
145 (Committed, Tr) => "işledi",
146 (BrowseFiles, En) => "Browse files",
147 (BrowseFiles, Tr) => "Dosyalara göz at",
148 (ErrConflict, En) => {
149 "This branch has conflicts that must be resolved. Resolve them on the branch, then try again."
150 }
151 (ErrConflict, Tr) => {
152 "Bu dalda çözülmesi gereken çakışmalar var. Çakışmaları dalda çözün, sonra yeniden deneyin."
153 }
154 (ErrUpToDate, En) => {
155 "There is nothing to merge: this branch is already contained in the base branch."
156 }
157 (ErrUpToDate, Tr) => {
158 "Birleştirilecek bir şey yok: bu dal zaten taban dalın içinde yer alıyor."
159 }
160 (ErrFfImpossible, En) => {
161 "A fast-forward is not possible because the base branch has commits this branch does not contain. Choose a merge commit or a squash instead."
162 }
163 (ErrFfImpossible, Tr) => {
164 "Taban dalda bu dalda bulunmayan commitler olduğu için ileri sarma yapılamaz. Bunun yerine birleştirme commit’i veya sıkıştırma seçin."
165 }
166 (ErrBaseMoved, En) => {
167 "The base branch changed while you were merging. Reload this page and try again."
168 }
169 (ErrBaseMoved, Tr) => {
170 "Birleştirme sırasında taban dal değişti. Bu sayfayı yenileyip yeniden deneyin."
171 }
172 (ErrAlreadyMerged, En) => "This pull request is already merged.",
173 (ErrAlreadyMerged, Tr) => "Bu çekme isteği zaten birleştirilmiş.",
174 (ErrNotOpen, En) => "This pull request is closed, so it cannot be merged.",
175 (ErrNotOpen, Tr) => "Bu çekme isteği kapalı olduğu için birleştirilemez.",
176 (ErrHeadMissing, En) => {
177 "The head repository was deleted, so this pull request cannot be merged."
178 }
179 (ErrHeadMissing, Tr) => "Kaynak depo silindiği için bu çekme isteği birleştirilemez.",
180 (ErrBaseMissing, En) => "The base branch does not exist.",
181 (ErrBaseMissing, Tr) => "Taban dal mevcut değil.",
182 (ErrNeedsApprovals, En) => {
183 "This branch needs more approvals from reviewers with Write access before it can be merged."
184 }
185 (ErrNeedsApprovals, Tr) => {
186 "Bu dalın birleştirilmesi için yazma yetkisi olan inceleyenlerden daha fazla onay gerekiyor."
187 }
188 (ErrChangesRequested, En) => {
189 "Changes have been requested, so this branch cannot be merged until they are resolved."
190 }
191 (ErrChangesRequested, Tr) => {
192 "Değişiklik istendiği için bu dal, istenen değişiklikler çözülene kadar birleştirilemez."
193 }
194 (ErrNotUpToDate, En) => {
195 "The pull request head must contain the latest base branch before it can be merged. Update the branch, then try again."
196 }
197 (ErrNotUpToDate, Tr) => {
198 "Çekme isteğinin kaynak dalı, birleştirilmeden önce en son taban dalı içermelidir. Dalı güncelleyip yeniden deneyin."
199 }
200 (ErrMessageInvalid, En) => {
201 "The merge message is longer than 64 KiB or contains a NUL byte. Shorten it and try again."
202 }
203 (ErrMessageInvalid, Tr) => {
204 "Birleştirme mesajı 64 KiB’tan uzun veya NUL karakteri içeriyor. Kısaltıp yeniden deneyin."
205 }
206 (ReviewErrStale, En) => "The pull request changed. Reload the page and try again.",
207 (ReviewErrStale, Tr) => "Çekme isteği değişti. Sayfayı yenileyip yeniden deneyin.",
208 (ReviewErrOwnPr, En) => "You cannot approve or request changes on your own pull request.",
209 (ReviewErrOwnPr, Tr) => {
210 "Kendi çekme isteğinizi onaylayamaz veya üzerinde değişiklik isteyemezsiniz."
211 }
212 (ReviewErrEmpty, En) => "Write a comment before you submit.",
213 (ReviewErrEmpty, Tr) => "Göndermeden önce bir yorum yazın.",
214 (ReviewErrInvalid, En) => "That comment could not be saved.",
215 (ReviewErrInvalid, Tr) => "Bu yorum kaydedilemedi.",
216 (ReviewErrBadLine, En) => {
217 "That line is not part of this diff any more. Reload the page and try again."
218 }
219 (ReviewErrBadLine, Tr) => {
220 "Bu satır artık bu farkın parçası değil. Sayfayı yenileyip yeniden deneyin."
221 }
222 (ReviewErrClosed, En) => "This pull request is closed, so new reviews cannot be submitted.",
223 (ReviewErrClosed, Tr) => {
224 "Bu çekme isteği kapalı olduğu için yeni incelemeler gönderilemez."
225 }
226 (EditReviewComment, En) => "Edit review comment",
227 (EditReviewComment, Tr) => "İnceleme yorumunu düzenle",
228 (CommentLabel, En) => "Comment",
229 (CommentLabel, Tr) => "Yorum",
230 (SaveComment, En) => "Save comment",
231 (SaveComment, Tr) => "Yorumu kaydet",
232 (CancelButton, En) => "Cancel",
233 (CancelButton, Tr) => "İptal",
234 (Unresolve, En) => "Unresolve",
235 (Unresolve, Tr) => "Çözümü geri al",
236 (Resolve, En) => "Resolve",
237 (Resolve, Tr) => "Çözüldü olarak işaretle",
238 (Outdated, En) => "Outdated",
239 (Outdated, Tr) => "Güncel değil",
240 (Pending, En) => "Pending",
241 (Pending, Tr) => "Bekliyor",
242 (ReplyLabel, En) => "Reply",
243 (ReplyLabel, Tr) => "Yanıt",
244 (ReplyButton, En) => "Reply",
245 (ReplyButton, Tr) => "Yanıtla",
246 (Edited, En) => "edited",
247 (Edited, Tr) => "düzenlendi",
248 (EditLink, En) => "Edit",
249 (EditLink, Tr) => "Düzenle",
250 (DeleteButton, En) => "Delete",
251 (DeleteButton, Tr) => "Sil",
252 }
253}
254
255/// "1 commit", "3 commits"; Turkish does not pluralise after a number.
256pub fn commit_count_line(lang: Lang, count: usize) -> String {
257 match lang {
258 Lang::En if count == 1 => "1 commit".to_owned(),
259 Lang::En => format!("{count} commits"),
260 Lang::Tr => format!("{count} commit’i"),
261 }
262}
263
264/// The Commits sub-tab label with its count.
265pub fn commits_tab(lang: Lang, count: usize) -> String {
266 match lang {
267 Lang::En => format!("Commits {count}"),
268 Lang::Tr => format!("Commitler {count}"),
269 }
270}
271
272/// The Files changed sub-tab label with its count.
273pub fn files_tab(lang: Lang, count: usize) -> String {
274 match lang {
275 Lang::En => format!("Files changed {count}"),
276 Lang::Tr => format!("Değişen dosyalar {count}"),
277 }
278}
279
280/// A head branch whose repository was deleted.
281pub fn branch_deleted(lang: Lang, branch: &str) -> String {
282 match lang {
283 Lang::En => format!("{branch} (deleted)"),
284 Lang::Tr => format!("{branch} (silinmiş)"),
285 }
286}
287
288/// "2 of 3 required approvals".
289pub fn approvals_of(lang: Lang, have: impl Display, need: impl Display) -> String {
290 match lang {
291 Lang::En => format!("{have} of {need} required approvals"),
292 Lang::Tr => format!("{have} / {need} gerekli onay"),
293 }
294}
295
296/// "Approved by Ada, Lin".
297pub fn approved_by(lang: Lang, names: &str) -> String {
298 match lang {
299 Lang::En => format!("Approved by {names}"),
300 Lang::Tr => format!("{names} tarafından onaylandı"),
301 }
302}
303
304/// "Changes requested by Ada".
305pub fn changes_requested_by(lang: Lang, names: &str) -> String {
306 match lang {
307 Lang::En => format!("Changes requested by {names}"),
308 Lang::Tr => format!("{names} tarafından değişiklik istendi"),
309 }
310}
311
312/// The label of the reason field on a Dismiss form.
313pub fn dismiss_reason(lang: Lang, author: &str) -> String {
314 match lang {
315 Lang::En => format!("Reason for dismissing {author}'s review"),
316 Lang::Tr => format!("{author} adlı kullanıcının incelemesini yok saymanın nedeni"),
317 }
318}
319
320/// The summary of a resolved thread, naming its `path:line`.
321pub fn resolved_conversation(lang: Lang, location: &str) -> String {
322 match lang {
323 Lang::En => format!("Resolved conversation on {location}"),
324 Lang::Tr => format!("{location} konumundaki tartışma çözüldü"),
325 }
326}
327
328/// The page title of the edit form for a review comment on a pull request.
329pub fn edit_title(lang: Lang, number: i64, repo: &str) -> String {
330 match lang {
331 Lang::En => format!("Edit review comment on #{number} \u{b7} {repo}"),
332 Lang::Tr => {
333 format!("#{number} numaralı çekme isteğindeki inceleme yorumunu düzenle \u{b7} {repo}")
334 }
335 }
336}
337
338#[cfg(test)]
339pub const ALL: &[K] = &[
340 K::StateMerged,
341 K::StateOpen,
342 K::StateClosed,
343 K::Unknown,
344 K::ByWantsToMerge,
345 K::ByInto,
346 K::ByFrom,
347 K::BylineEnd,
348 K::TabConversation,
349 K::PullPages,
350 K::MergeClean,
351 K::MergeConflict,
352 K::MergeUpToDate,
353 K::MergeChecking,
354 K::ReloadToCheck,
355 K::MergeStyleLegend,
356 K::StyleMergeCommit,
357 K::StyleSquash,
358 K::StyleFastForward,
359 K::MergeMessageLabel,
360 K::MergeButton,
361 K::MergedByPrefix,
362 K::MergedByMiddle,
363 K::MergedAsSep,
364 K::DismissButton,
365 K::ArchivedReadOnly,
366 K::LoginBefore,
367 K::LoginLink,
368 K::LoginAfter,
369 K::MergedCannotChange,
370 K::NoCommits,
371 K::Committed,
372 K::BrowseFiles,
373 K::ErrConflict,
374 K::ErrUpToDate,
375 K::ErrFfImpossible,
376 K::ErrBaseMoved,
377 K::ErrAlreadyMerged,
378 K::ErrNotOpen,
379 K::ErrHeadMissing,
380 K::ErrBaseMissing,
381 K::ErrNeedsApprovals,
382 K::ErrChangesRequested,
383 K::ErrNotUpToDate,
384 K::ErrMessageInvalid,
385 K::ReviewErrStale,
386 K::ReviewErrOwnPr,
387 K::ReviewErrEmpty,
388 K::ReviewErrInvalid,
389 K::ReviewErrBadLine,
390 K::ReviewErrClosed,
391 K::EditReviewComment,
392 K::CommentLabel,
393 K::SaveComment,
394 K::CancelButton,
395 K::Unresolve,
396 K::Resolve,
397 K::Outdated,
398 K::Pending,
399 K::ReplyLabel,
400 K::ReplyButton,
401 K::Edited,
402 K::EditLink,
403 K::DeleteButton,
404];
405
406#[cfg(test)]
407mod tests {
408 use super::*;
409
410 #[test]
411 fn every_key_has_english_and_turkish() {
412 for key in ALL {
413 // The English lead before a login link is empty by design.
414 if *key != K::LoginBefore {
415 assert!(!t(Lang::En, *key).is_empty(), "{key:?} has no English");
416 }
417 assert!(!t(Lang::Tr, *key).is_empty(), "{key:?} has no Turkish");
418 }
419 }
420
421 #[test]
422 fn turkish_differs_from_english_for_translated_keys() {
423 let differing = ALL
424 .iter()
425 .filter(|key| t(Lang::En, **key) != t(Lang::Tr, **key))
426 .count();
427 assert!(differing >= 3, "only {differing} keys differ");
428 assert_eq!(t(Lang::En, K::StateOpen), "Open");
429 assert_eq!(t(Lang::Tr, K::StateOpen), "Açık");
430 }
431
432 #[test]
433 fn counted_helpers_match_english_text() {
434 assert_eq!(commit_count_line(Lang::En, 1), "1 commit");
435 assert_eq!(commit_count_line(Lang::En, 3), "3 commits");
436 assert_eq!(commits_tab(Lang::En, 4), "Commits 4");
437 assert_eq!(files_tab(Lang::En, 2), "Files changed 2");
438 assert_eq!(approvals_of(Lang::En, 1, 2), "1 of 2 required approvals");
439 assert_eq!(commit_count_line(Lang::Tr, 3), "3 commit’i");
440 }
441}