mirror of
https://github.com/wekan/wekan.git
synced 2026-11-05 01:20:07 -05:00
Translate rule-builder instructions in Moroccan Tamazight
Fill seven pending values and extend literal-variable regression checks. Runtime matching, all-locale structural and human-preference checks pass. Technical prose has lower confidence and needs native terminology and regional-usage review. Browser scenarios were not run because the app stack was unavailable. Thanks to xet7 !
This commit is contained in:
1 parent
2b21c97ee1
commit
58c0d84d7a
3 files changed
+30
-10
No files matched your search
@@ -2672,6 +2672,26 @@ not run; the app stack was unavailable. 5 locale paths still need this group.
|
||||
The snapshot remains 51,575 ordinary missing values plus 181 pending keys;
|
||||
broader language-quality review remains open.
|
||||
|
||||
### Rule-builder instructions — Standard Moroccan Tamazight (2026-10-07)
|
||||
|
||||
Filled seven pending strings in zgh, preserving existing translations and all
|
||||
literal variable expressions. No translation service was used. New prose uses
|
||||
Tifinagh and retains any-trigger behavior, ordered actions, username/email context
|
||||
and card-derived variables. It has lower confidence; regional usage, technical
|
||||
terms, recipient fields and composed date fragments need native/UI review.
|
||||
The existing Latin-script list and lane labels remain unchanged; terminology
|
||||
consistency across the broader locale remains a review item.
|
||||
References consulted include [Moroccan Tamazight vocabulary](https://dicber-mc.centrederechercheberbere.fr/)
|
||||
and the [Tifinagh vocabulary guide](https://library-of-tamazight.github.io/data/resources/09-18/05.pdf).
|
||||
These references do not validate full-sentence accuracy.
|
||||
|
||||
The existing trigger-variable suite now checks 62 recently filled locales for
|
||||
source order and exact brace/underscore/percent tokens. Runtime matching,
|
||||
all-locale structural and human-preference checks pass. Browser scenarios were
|
||||
not run; the app stack was unavailable. 4 locale paths still need this group.
|
||||
The snapshot remains 51,575 ordinary missing values plus 181 pending keys;
|
||||
broader language-quality review remains open.
|
||||
|
||||
## Original flagged inventory
|
||||
|
||||
| Status | Flagged keys |
|
||||
|
||||
@@ -1343,7 +1343,7 @@
|
||||
"r-schedule-on-date": "ⴷⴻⴳ ⵓⵣⴻⵎⵣ",
|
||||
"r-of-cards-in-list": "ⵉ ⵜⴽⴰⵔⴹⵉⵡⵉⵏ ⴷⴻⴳ ⵓⵎⵓⵖ",
|
||||
"r-when-due": "ⵎⴻⵍⵎⵉ ⴰⵣⴻⵎⵣ ⴰⵎⴳⴳⴰⵔⵓ ⵏ ⵜⴽⴰⵔⴹⴰ",
|
||||
"r-when-card-date": "When this date of a card",
|
||||
"r-when-card-date": "ⴰⵙⴰⴽⵓⴷ ⴰⴷ ⵏ ⵜⴽⴰⵕⴹⴰ",
|
||||
"r-due-is-set": "ⵢⴻⵜⵜⵡⴰⵙⵔⴻⵙ",
|
||||
"r-due-soon": "ⵢⴻⵇⵔⴻⴱ",
|
||||
"r-due-overdue": "ⵢⴻⵄⴷⴷⴰ",
|
||||
@@ -1437,14 +1437,14 @@
|
||||
"r-of": "ⴷ",
|
||||
"r-subject": "ⵉⵎⵔⵙⵉ",
|
||||
"r-email-vars-hint": "ⵉⵙⵎⵍⵍ ⵉⵍⴰⵏ: {card}, {cardLink}, {list}, {board}, {member}",
|
||||
"r-trigger-vars-hint": "List, swimlane, title, checklist and user fields also accept {creator}, {assignees}, {members} and {customField:Name}, read from the card when the rule is checked.",
|
||||
"r-trigger-vars-hint": "ⵉⴳⵔⴰⵏ ⵏ ⵜⴱⴷⴰⵔⵜ, ⵓⴱⵔⵉⴷ, ⵓⵣⵡⵍ, ⵜⴱⴷⴰⵔⵜ ⵏ ⵓⵙⵙⵉⴷⴷⵏ ⴷ ⵓⵙⵎⵔⴰⵙ ⴰⵔ ⵜⵜⵇⴱⴰⵍⵏ ⴰⵡⴷ {creator}, {assignees}, {members} ⴷ {customField:Name}. ⴰⵔ ⵜⵜⵡⴰⵖⵔⴰⵏⵜ ⵜⴰⵏⵣⴰⵍⵉⵏ ⵏⵏⵙⵏ ⵙⴳ ⵜⴽⴰⵕⴹⴰ ⵎⴽ ⵉⵜⵜⵡⴰⵙⵙⵉⴷⴷⵏ ⵓⵍⵓⴳⵏ.",
|
||||
"r-insert-variable": "Insert variable into the last text field:",
|
||||
"r-vars-people-hint": "Also: {creator}, {assignees}, {members} (usernames in text, email addresses in To) and {customField:Field name}. These also work in member, list and swimlane names of other actions.",
|
||||
"r-vars-people-hint": "ⴰⵡⴷ: {creator}, {assignees}, {members} (ⵉⵙⵎⴰⵡⵏ ⵏ ⵉⵙⵎⵔⴰⵙⵏ ⴳ ⵓⴹⵕⵉⵚ, ⵜⴰⵙⵏⵉⵡⵉⵏ ⵏ ⵉⵎⴰⵢⵍ ⴳ ⵉⴳⵔ ⵏ ⵓⵎⴰⵟⵟⴰⴼ) ⴷ {customField:Field name}. ⵣⵎⵔⵏ ⴰⴷ ⵜⵜⵓⵙⵎⵔⵙⵏ ⴰⵡⴷ ⴳ ⵉⵙⵎⴰⵡⵏ ⵏ ⵉⴳⵎⴰⵎⵏ, ⵜⵉⴱⴷⴰⵔⵉⵏ ⴷ ⵉⴱⵔⴷⴰⵏ ⵏ ⵜⵉⴳⴰⵡⵉⵏ ⵢⴰⴹⵏⵉⵏ.",
|
||||
"r-rule-details": "ⵉⴼⵔⵓⵔⵉⵜⵏ ⵏ ⵓⵍⵓⴳⵏ",
|
||||
"r-rule-any-trigger-help": "The rule runs when any of its triggers happens. Its actions run in order.",
|
||||
"r-add-trigger-to-rule": "Add another trigger",
|
||||
"r-add-action-to-rule": "Add another action",
|
||||
"r-remove-rule-part": "Remove",
|
||||
"r-rule-any-trigger-help": "ⴰⵔ ⵉⵜⵜⵡⴰⵙⴽⴰⵔ ⵓⵍⵓⴳⵏ ⵎⴽ ⵉⴹⵕⴰ ⵢⴰⵏ ⴳ ⵉⵎⵙⵙⵏⴽⵔⵏ ⵏⵏⵙ. ⴰⵔ ⵜⵜⵡⴰⵙⴽⴰⵔⵏⵜ ⵜⵉⴳⴰⵡⵉⵏ ⵏⵏⵙ ⵙ ⵓⵎⵣⴰⵔⴰⵢ.",
|
||||
"r-add-trigger-to-rule": "ⵔⵏⵓ ⴰⵎⵙⵙⵏⴽⵔ ⵢⴰⴹⵏ",
|
||||
"r-add-action-to-rule": "ⵔⵏⵓ ⵜⵉⴳⴰⵡⵜ ⵢⴰⴹⵏ",
|
||||
"r-remove-rule-part": "ⴽⴽⵙ",
|
||||
"r-d-move-to-top-gen": "ⵙⵎⵓⵜⵜⵉ ⵜⴰⴽⴰⵕⴹⴰ ⴳ ⵓⴷⵖⴰⵔ ⴰⵎⵣⵡⴰⵔⵓ ⵏ ⵜⵍⴳⴰⵎⵜ ⵏⵏⵙ",
|
||||
"r-d-move-to-top-spec": "ⵙⵎⵓⵜⵜⵉ ⵜⴰⴽⴰⵕⴹⴰ ⴳ ⵓⴷⵖⴰⵔ ⴰⵎⵣⵡⴰⵔⵓ ⵏ ⵜⵍⴳⴰⵎⵜ",
|
||||
"r-d-move-to-bottom-gen": "ⵙⵎⵓⵜⵜⵉ ⵜⴰⴽⴰⵕⴹⴰ ⴳ ⵓⴷⵖⴰⵔ ⴰⵎⴳⴳⴰⵔⵓ ⵏ ⵜⵍⴳⴰⵎⵜ ⵏⵏⵙ",
|
||||
|
||||
@@ -74,7 +74,7 @@ console.log(' ok - rules find token triggers, and the editor keeps and explains
|
||||
const english = readLocale('en');
|
||||
const keys = ["r-vars-people-hint", "r-when-card-date", "r-rule-any-trigger-help", "r-add-trigger-to-rule", "r-add-action-to-rule", "r-remove-rule-part", "r-trigger-vars-hint"];
|
||||
const braceTokens = text => (text.match(/\{[^{}]+\}/g) || []).sort();
|
||||
for (const code of ['tk_TM', 'tt', 'so', 'ku', 'ckb', 'pap', 'tpi', 'bi', 'mi', 'sm', 'haw', 'zu', 'zu-ZA', 'xh', 'st', 'tn', 'rw', 'rn', 'ny', 'bho', 'mai', 'or_IN', 'kok', 'ary', 'yi', 'nd', 'ss', 'nso', 'ts', 'om', 'fj', 'to', 'gv', 'wa', 'wa-RR', 'ak', 'lg', 'wo', 'bm', 'ee', 'rup', 've-CC', 'bua', 'sah', 'cv', 've', 'se', 'ace', 'bo', 'dz', 'ti', 'ks', 'qu', 'ay', 'gn', 'ff', 've-PP', 'vo', 'kl', 'nah', 'tlh']) {
|
||||
for (const code of ['tk_TM', 'tt', 'so', 'ku', 'ckb', 'pap', 'tpi', 'bi', 'mi', 'sm', 'haw', 'zu', 'zu-ZA', 'xh', 'st', 'tn', 'rw', 'rn', 'ny', 'bho', 'mai', 'or_IN', 'kok', 'ary', 'yi', 'nd', 'ss', 'nso', 'ts', 'om', 'fj', 'to', 'gv', 'wa', 'wa-RR', 'ak', 'lg', 'wo', 'bm', 'ee', 'rup', 've-CC', 'bua', 'sah', 'cv', 've', 'se', 'ace', 'bo', 'dz', 'ti', 'ks', 'qu', 'ay', 'gn', 'ff', 've-PP', 'vo', 'kl', 'nah', 'tlh', 'zgh']) {
|
||||
const locale = readLocale(code);
|
||||
assert.deepEqual(Object.keys(locale), Object.keys(english), `${code}: source order`);
|
||||
for (const key of keys) {
|
||||
@@ -101,7 +101,7 @@ console.log(' ok - rules find token triggers, and the editor keeps and explains
|
||||
assert.equal(readLocale('qu')['r-trigger'], 'Qallariq');
|
||||
assert.equal(readLocale('qu')['r-action'], 'Rurana');
|
||||
assert.equal(readLocale('ay')['r-trigger'], 'Qalltayiri');
|
||||
for (const code of ['qu', 'ay', 'gn', 'ff', 've-PP', 'vo', 'kl', 'nah', 'tlh']) {
|
||||
for (const code of ['qu', 'ay', 'gn', 'ff', 've-PP', 'vo', 'kl', 'nah', 'tlh', 'zgh']) {
|
||||
for (const key of ['r-trigger', 'r-action', ...keys]) {
|
||||
assert.doesNotMatch(readLocale(code)[key], /Kay willaymi:|Aymar aruna:|Trigger|Action/, `${code}:${key}: no prefixed English`);
|
||||
}
|
||||
@@ -135,5 +135,5 @@ console.log(' ok - rules find token triggers, and the editor keeps and explains
|
||||
assert.doesNotMatch(darija[key], /[پچژگکی]/, `${key}: no Persian letters from the wrong-language seed`);
|
||||
}
|
||||
assert.notDeepEqual(braceTokens('{customField:Name}'), braceTokens('{customField:Translated}'));
|
||||
console.log('Rule builder translations: 7 strings in 61 locales passed');
|
||||
console.log('Rule builder translations: 7 strings in 62 locales passed');
|
||||
}
|
||||
Reference in new issue
Block a user