Translate Kurdish archiving and date filter messages

Fill 46 English placeholders in Kurdish and Central Kurdish. Preserve existing translations, exact placeholders, numeric limits and literal filter query syntax; extend archive/date regression coverage to both locales. Seven relevant suites and 21 human-preference checks pass, with the affected regression rerun after wording refinements. Preservation audits confirm only English placeholders changed.

Kurdish and Central Kurdish wording is provisional and would benefit from speaker review.

Thanks to xet7 !
This commit is contained in:
Lauri Ojansivu committed 2026-10-03 14:57:29 +03:00
1 parent 6284d5d9c0
commit c9e622f1b5
3 files changed
+52 -48

No files matched your search

+23 -23
View File
@@ -500,9 +500,9 @@
"card-aging-tier1": "ئاستی 1 (کاڵبوونەوەی کەم) دوای ئەم ژمارە ڕۆژە بێ‌چالاکییە",
"card-aging-tier2": "ئاستی 2 (کاڵبوونەوەی مامناوەند) دوای ئەم ژمارە ڕۆژە بێ‌چالاکییە",
"card-aging-tier3": "ئاستی 3 (کاڵبوونەوەی زۆر) دوای ئەم ژمارە ڕۆژە بێ‌چالاکییە",
"auto-archive-days": "Archive cards after this many days without activity",
"auto-archive-off": "Off",
"auto-archive-hint": "Checked every hour. A card counts as active whenever it is changed; templates are never archived. Leave empty to turn it off.",
"auto-archive-days": "کارتەکان دوای ئەم ژمارەیە ڕۆژ بێ چالاکی بگوازەوە بۆ ئەرشیف",
"auto-archive-off": "ناچالاک",
"auto-archive-hint": "هەموو کاتژمێرێک پشکنین دەکرێت. هەر جارێک کارت بگۆڕدرێت بە چالاک دادەنرێت؛ قاڵبەکان هەرگیز ناگوازرێنەوە بۆ ئەرشیف. بۆ ناچالاککردن بەتاڵی بهێڵەوە.",
"move-card-up": "کارت بگوازەوە سەرەوە",
"move-card-down": "کارت بگوازەوە خوارەوە",
"move-list-left": "لیست بگوازەوە چەپ",
@@ -710,25 +710,25 @@
"list-label-short-sort": "(M)",
"filter": "پاڵێوەر",
"filter-cards": "پاڵاوتنی کارت یان لیست",
"filter-recency-any": "Any time",
"filter-recency-day": "Within the last 24 hours",
"filter-recency-week": "Within the last 7 days",
"filter-recency-month": "Within the last 30 days",
"filter-recency-older": "More than 30 days ago",
"filter-movement-range": "Moved during (recorded history)",
"filter-date-range-field": "Date field",
"filter-date-range-from": "From (inclusive)",
"filter-date-range-to": "Through (inclusive)",
"filter-date-range-missing": "Include cards without this date",
"filter-date-range-list-entry": "Entered current list",
"filter-date-range-invalid": "Choose valid dates, with the end on or after the start.",
"filter-recency-any": "هەر کاتێک",
"filter-recency-day": "لە ماوەی 24 کاتژمێری ڕابردوودا",
"filter-recency-week": "لە ماوەی 7 ڕۆژی ڕابردوودا",
"filter-recency-month": "لە ماوەی 30 ڕۆژی ڕابردوودا",
"filter-recency-older": "زیاتر لە 30 ڕۆژ لەمەوبەر",
"filter-movement-range": "لەو ماوەیەدا گوازراوەتەوە (مێژووی تۆمارکراو)",
"filter-date-range-field": "خانەی بەروار",
"filter-date-range-from": "لە (ئەو ڕۆژەش دەگرێتەوە)",
"filter-date-range-to": "تا (ئەو ڕۆژەش دەگرێتەوە)",
"filter-date-range-missing": "کارتە بێ ئەم بەروارەش بخەرە ناو",
"filter-date-range-list-entry": "کاتی چوونە ناو لیستی ئێستا",
"filter-date-range-invalid": "بەرواری دروست هەڵبژێرە؛ بەرواری کۆتایی دەبێت لە هەمان ڕۆژی دەستپێک یان دوای ئەو بێت.",
"filter-dates-label": "پاڵاوتن بە بەروار",
"filter-no-due-date": "بێ بەرواری کۆتایی",
"filter-overdue": "کاتی تێپەڕیوە",
"filter-due-any": "Any due date (including none)",
"filter-due-any": "هەر بەروارێکی کۆتایی (بێ بەروارەکانیش)",
"filter-due-today": "کۆتایی ئەمڕۆ",
"filter-due-previous-week": "Due in the previous week",
"filter-due-next-month": "Due next month",
"filter-due-previous-week": "بەرواری کۆتایی لە هەفتەی ڕابردوودا",
"filter-due-next-month": "بەرواری کۆتایی لە مانگی داهاتوودا",
"filter-due-this-week": "کۆتایی ئەم هەفتەیە",
"filter-due-next-week": "کۆتایی هەفتەی داهاتوو",
"filter-due-tomorrow": "کۆتایی سبەی",
@@ -742,10 +742,10 @@
"filter-assignee-label": "پاڵاوتن بە دیاریکراو",
"filter-creator-label": "پاڵاوتن بە دروستکەر",
"filter-no-assignee": "بێ دیاریکراو",
"filter-column-age": "Hide old cards in a list",
"filter-column-age-disabled": "Do not hide by list age",
"filter-column-age-days": "Days in this list",
"filter-column-age-hint": "Hide cards that entered this list more than this many days ago. Other lists and cards with unknown entry dates remain visible. Editing a card does not reset its list age.",
"filter-column-age": "کارتە کۆنەکانی لیست بشارەوە",
"filter-column-age-disabled": "بەپێی ماوەی مانەوە لە لیستدا مەشارەوە",
"filter-column-age-days": "ڕۆژەکانی مانەوە لەم لیستەدا",
"filter-column-age-hint": "ئەو کارتانە بشارەوە کە زیاتر لەم ژمارەیە ڕۆژ لەمەوبەر چوونەتە ناو ئەم لیستە. لیستەکانی تر و ئەو کارتانەی بەرواری چوونە ناویان نەزانراوە هەر دیار دەمێننەوە. دەستکاریکردنی کارت ماوەی مانەوەی لە لیستدا لە نوێوە دەست پێ ناکات.",
"filter-custom-fields-label": "پاڵاوتن بە خانە تایبەتییەکان",
"filter-no-custom-fields": "بێ خانەی تایبەت",
"filter-show-archive": "لیستە ئەرشیفکراوەکان پیشان بدە",
@@ -754,7 +754,7 @@
"filter-on-desc": "کارتەکانی ئەم تەختەیە پاڵدەوێیت. بۆ دەستکاریکردنی پاڵاوتن لێرە کرتە بکە.",
"filter-to-selection": "پاڵاوتن بۆ هەڵبژاردە",
"other-filters-label": "پاڵاوتنەکانی تر",
"advanced-filter-card-dates-hint": "Filter card dates with @createdAt, @receivedAt, @startAt, @dueAt, @endAt or @listEnteredAt. Example: @endAt >= '2026-01-01' or @endAt = none. Quote a custom field name that starts with @.",
"advanced-filter-card-dates-hint": "بەرواری کارتەکان بە @createdAt، @receivedAt، @startAt، @dueAt، @endAt یان @listEnteredAt پاڵاوتن بکە. نموونە: @endAt >= '2026-01-01' یان @endAt = none. ناوی خانەی تایبەت کە بە @ دەست پێ دەکات لە نێوان کوتیشندا بنووسە.",
"advanced-filter-label": "پاڵاوتنی پێشکەوتوو",
"advanced-filter-description": "پاڵاوتنی پێشکەوتوو ڕێگە دەدات زنجیرەیەک بنووسیت کە ئەم کارگێڕانەی تێدایە: == != <= >= && || ( ) بۆشایی وەک جیاکەرەوەی کارگێڕان بەکاردێت. دەتوانیت هەموو خانە تایبەتییەکان بە نووسینی ناو و بەهاکانیان پاڵبێویت. بۆ نموونە: Field1 == Value1. تێبینی: ئەگەر خانە یان بەهاکان بۆشاییان تێدابێت، دەبێت لەناو نیشانەی وتەی تاک دایانبخەیت. بۆ نموونە: 'Field 1' == 'Value 1'. بۆ پەڕاندنی پیتی کۆنترۆڵی تاک (' \\/) دەتوانیت \\ بەکاربهێنیت. بۆ نموونە: Field1 == I\\'m. هەروەها دەتوانیت چەند مەرجێک تێکەڵ بکەیت. بۆ نموونە: F1 == V1 || F1 == V2. بە ئاسایی هەموو کارگێڕان لە چەپەوە بۆ ڕاست لێکدەدرێنەوە. دەتوانیت بە دانانی کەوانە ڕیزبەندییەکە بگۆڕیت. بۆ نموونە: F1 == V1 && ( F2 == V2 || F2 == V3 ). هەروەها دەتوانیت بە regex لە خانە دەقییەکان بگەڕێیت: F1 == /Tes.*/i",
"text-contains-trigger-label": "النص المراد البحث عنه",
+23 -23
View File
@@ -500,9 +500,9 @@
"card-aging-tier1": "Asta 1 (tarîbûna sivik) piştî van rojên bêçalakiyê",
"card-aging-tier2": "Asta 2 (tarîbûna navîn) piştî van rojên bêçalakiyê",
"card-aging-tier3": "Asta 3 (tarîbûna giran) piştî van rojên bêçalakiyê",
"auto-archive-days": "Archive cards after this many days without activity",
"auto-archive-off": "Off",
"auto-archive-hint": "Checked every hour. A card counts as active whenever it is changed; templates are never archived. Leave empty to turn it off.",
"auto-archive-days": "Piştî evqas rojan bê çalakî kartan arşîv bike",
"auto-archive-off": "Girtî",
"auto-archive-hint": "Her saet tê kontrolkirin. Dema ku kart tê guhertin, çalak tê hesibandin; şablon tu carî nayên arşîvkirin. Ji bo neçalakkirinê vala bihêle.",
"move-card-up": "Kartê bibe jor",
"move-card-down": "Kartê bibe jêr",
"move-list-left": "Lîsteyê bibe çepê",
@@ -710,25 +710,25 @@
"list-label-short-sort": "(M)",
"filter": "Parzûn",
"filter-cards": "Kartan an lîsteyan parzûn bike",
"filter-recency-any": "Any time",
"filter-recency-day": "Within the last 24 hours",
"filter-recency-week": "Within the last 7 days",
"filter-recency-month": "Within the last 30 days",
"filter-recency-older": "More than 30 days ago",
"filter-movement-range": "Moved during (recorded history)",
"filter-date-range-field": "Date field",
"filter-date-range-from": "From (inclusive)",
"filter-date-range-to": "Through (inclusive)",
"filter-date-range-missing": "Include cards without this date",
"filter-date-range-list-entry": "Entered current list",
"filter-date-range-invalid": "Choose valid dates, with the end on or after the start.",
"filter-recency-any": "Her dem",
"filter-recency-day": "Di 24 saetên dawî de",
"filter-recency-week": "Di 7 rojên dawî de",
"filter-recency-month": "Di 30 rojên dawî de",
"filter-recency-older": "Zêdetirî 30 rojan berê",
"filter-movement-range": "Di vê demê de hatine veguhastin (dîroka tomarkirî)",
"filter-date-range-field": "Qada dîrokê",
"filter-date-range-from": "Ji (ev roj jî tê de ye)",
"filter-date-range-to": "Heta (ev roj jî tê de ye)",
"filter-date-range-missing": "Kartên bê vê dîrokê jî têxe nav",
"filter-date-range-list-entry": "Dema ketina lîsteya niha",
"filter-date-range-invalid": "Dîrokên derbasdar hilbijêre; dîroka dawiyê divê heman roja destpêkê an piştî wê be.",
"filter-dates-label": "Bi dîrokê parzûn bike",
"filter-no-due-date": "Dîroka dawî tune",
"filter-overdue": "Dema wê derbasbûyî",
"filter-due-any": "Any due date (including none)",
"filter-due-any": "Her dîroka dawî (yên bê dîrok jî)",
"filter-due-today": "Dîroka dawî îro",
"filter-due-previous-week": "Due in the previous week",
"filter-due-next-month": "Due next month",
"filter-due-previous-week": "Dîroka dawî di hefteya borî de",
"filter-due-next-month": "Dîroka dawî di meha bê de",
"filter-due-this-week": "Dîroka dawî vê hefteyê",
"filter-due-next-week": "Dîroka dawî hefteya pêş",
"filter-due-tomorrow": "Dîroka dawî sibê",
@@ -742,10 +742,10 @@
"filter-assignee-label": "Bi berpirsî parzûn bike",
"filter-creator-label": "Bi berpirsî parzûn Afirîner",
"filter-no-assignee": "Berpirs tune",
"filter-column-age": "Hide old cards in a list",
"filter-column-age-disabled": "Do not hide by list age",
"filter-column-age-days": "Days in this list",
"filter-column-age-hint": "Hide cards that entered this list more than this many days ago. Other lists and cards with unknown entry dates remain visible. Editing a card does not reset its list age.",
"filter-column-age": "Kartên kevn ên lîsteyê veşêre",
"filter-column-age-disabled": "Li gorî dema di lîsteyê de neveşêre",
"filter-column-age-days": "Rojên di vê lîsteyê de",
"filter-column-age-hint": "Kartên ku zêdetirî evqas rojan berê ketine vê lîsteyê veşêre. Lîsteyên din û kartên ku dîroka ketina wan nayê zanîn xuya dimînin. Guherandina kartê dema wê ya di lîsteyê de ji nû ve nade destpêkirin.",
"filter-custom-fields-label": "Bi qadên taybet parzûn bike",
"filter-no-custom-fields": "Qadên taybet tune",
"filter-show-archive": "Lîsteyên arşîvkirî nîşan bide",
@@ -754,7 +754,7 @@
"filter-on-desc": "Tu kartên vê depoyê parzûn dikî. Ji bo guherandina parzûnê li vir bitikîne.",
"filter-to-selection": "Li gorî hilbijartinê parzûn bike",
"other-filters-label": "Parzûnên din",
"advanced-filter-card-dates-hint": "Filter card dates with @createdAt, @receivedAt, @startAt, @dueAt, @endAt or @listEnteredAt. Example: @endAt >= '2026-01-01' or @endAt = none. Quote a custom field name that starts with @.",
"advanced-filter-card-dates-hint": "Dîrokên kartan bi @createdAt, @receivedAt, @startAt, @dueAt, @endAt an @listEnteredAt parzûn bike. Mînak: @endAt >= '2026-01-01' an @endAt = none. Navê qada taybet a ku bi @ dest pê dike di nav nîşaneyên jêgirtinê de binivîse.",
"advanced-filter-label": "Parzûna pêşketî",
"advanced-filter-description": "Parzûna pêşketî destûrê dide ku rêzeke ku van operatoran dihewîne binivîsî: == != <= >= && || ( ) Valahî wek veqetînera di navbera Operatoran de tê bikaranîn. Tu dikarî bi nivîsandina nav û nirxên wan hemû Qadên Taybet parzûn bikî. Mînak: Field1 == Value1. Têbinî: Heke qad an nirx valahî dihewînin, divê wan di nav nîşanên yekane de bigirî. Mînak: 'Field 1' == 'Value 1'. Ji bo derbaskirina karakterên kontrolê yên yekane (' \\/), tu dikarî \\ bi kar bînî. Mînak: Field1 == I\\'m. Herwiha tu dikarî gelek mercan bi hev re bikar bînî. Mînak: F1 == V1 || F1 == V2. Bi gelemperî hemû operator ji çepê ber bi rastê tên şîrovekirin. Tu dikarî rêzê bi danîna kevanan biguherînî. Mînak: F1 == V1 && ( F2 == V2 || F2 == V3 ). Herwiha tu dikarî qadên nivîsê bi regex bigerî: F1 == /Tes.*/i",
"text-contains-trigger-label": "النص المراد البحث عنه",
+6 -2
View File
@@ -30,7 +30,7 @@ const keys = [
"filter-column-age-hint",
"advanced-filter-card-dates-hint"
];
for (const code of ['tk_TM', 'tt', 'so']) {
for (const code of ['tk_TM', 'tt', 'so', 'ku', 'ckb']) {
const locale = read(code);
assert.deepEqual(Object.keys(locale), Object.keys(en), `${code}: source key order`);
for (const key of keys) {
@@ -52,4 +52,8 @@ assert.match(read('so')['auto-archive-hint'], /waligood lama kaydiyo/);
assert.match(read('tk_TM')['filter-column-age-hint'], /täzeden başlatmaýar/);
assert.match(read('tt')['filter-column-age-hint'], /яңадан башламый/);
assert.match(read('so')['filter-column-age-hint'], /dib uma bilowdo/);
console.log('Archiving and date filters: 23 messages in Turkmen, Tatar and Somali passed');
assert.match(read('ku')['auto-archive-hint'], /tu carî nayên arşîvkirin/);
assert.match(read('ckb')['auto-archive-hint'], /هەرگیز ناگوازرێنەوە/);
assert.match(read('ku')['filter-column-age-hint'], /ji nû ve nade destpêkirin/);
assert.match(read('ckb')['filter-column-age-hint'], /لە نوێوە دەست پێ ناکات/);
console.log('Archiving and date filters: 23 messages in 5 locales passed');