@kolanut/language-packs 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +1 -1
- package/README.md +132 -40
- package/package.json +1 -2
- package/packs/afrikaans/keywords.json +39 -0
- package/packs/afrikaans/pack.json +40 -1
- package/packs/amharic/keywords.json +39 -0
- package/packs/amharic/pack.json +40 -1
- package/packs/arabic/keywords.json +39 -0
- package/packs/arabic/pack.json +40 -1
- package/packs/bambara/keywords.json +39 -0
- package/packs/bambara/pack.json +40 -1
- package/packs/by-country.json +1 -1
- package/packs/by-region.json +1 -1
- package/packs/coverage-summary.json +12 -12
- package/packs/french/keywords.json +39 -0
- package/packs/french/pack.json +40 -1
- package/packs/fulfulde/keywords.json +39 -0
- package/packs/fulfulde/pack.json +40 -1
- package/packs/hausa/keywords.json +39 -0
- package/packs/hausa/pack.json +40 -1
- package/packs/igbo/keywords.json +39 -0
- package/packs/igbo/pack.json +40 -1
- package/packs/index.json +25 -25
- package/packs/kinyarwanda/keywords.json +39 -0
- package/packs/kinyarwanda/pack.json +40 -1
- package/packs/languages-roadmap.json +151 -4
- package/packs/lingala/keywords.json +39 -0
- package/packs/lingala/pack.json +40 -1
- package/packs/logical-tokens.json +22 -8
- package/packs/luganda/keywords.json +39 -0
- package/packs/luganda/pack.json +40 -1
- package/packs/nigerian-pidgin/keywords.json +39 -0
- package/packs/nigerian-pidgin/pack.json +40 -1
- package/packs/official-target-keywords.json +16 -3
- package/packs/oromo/keywords.json +39 -0
- package/packs/oromo/pack.json +40 -1
- package/packs/portuguese-africa/keywords.json +39 -0
- package/packs/portuguese-africa/pack.json +40 -1
- package/packs/sesotho/keywords.json +39 -0
- package/packs/sesotho/pack.json +40 -1
- package/packs/setswana/keywords.json +39 -0
- package/packs/setswana/pack.json +40 -1
- package/packs/shona/keywords.json +39 -0
- package/packs/shona/pack.json +40 -1
- package/packs/somali/keywords.json +39 -0
- package/packs/somali/pack.json +40 -1
- package/packs/swahili/keywords.json +39 -0
- package/packs/swahili/pack.json +40 -1
- package/packs/target-coverage.json +90 -13
- package/packs/tigrinya/keywords.json +39 -0
- package/packs/tigrinya/pack.json +40 -1
- package/packs/twi/keywords.json +39 -0
- package/packs/twi/pack.json +40 -1
- package/packs/wolof/keywords.json +39 -0
- package/packs/wolof/pack.json +40 -1
- package/packs/xhosa/keywords.json +39 -0
- package/packs/xhosa/pack.json +40 -1
- package/packs/yoruba/keywords.json +39 -0
- package/packs/yoruba/pack.json +40 -1
- package/packs/zulu/keywords.json +39 -0
- package/packs/zulu/pack.json +40 -1
- package/badges/coverage.json +0 -6
- package/badges/packs.json +0 -6
- package/badges/targets.json +0 -6
- package/badges/tokens.json +0 -6
package/CONTRIBUTING.md
CHANGED
|
@@ -51,7 +51,7 @@ You can browse packs in `packs/index.json`, filter by country in `packs/by-count
|
|
|
51
51
|
|
|
52
52
|
### The token registry: What you need to translate
|
|
53
53
|
|
|
54
|
-
**Every pack must translate all logical tokens in `packs/logical-tokens.json`** (currently **
|
|
54
|
+
**Every pack must translate all logical tokens in `packs/logical-tokens.json`** (currently **112 tokens** across core, standard, advanced, and typescript-types tiers).
|
|
55
55
|
|
|
56
56
|
**Important rules:**
|
|
57
57
|
- Don't create custom token keys — propose new tokens in a separate PR
|
package/README.md
CHANGED
|
@@ -2,10 +2,71 @@
|
|
|
2
2
|
|
|
3
3
|
**Public open-source package** · Apache 2.0 · [Kolanut Technologies Ltd](https://kolacode.africa)
|
|
4
4
|
|
|
5
|
+
[](https://www.npmjs.com/package/@kolanut/language-packs)
|
|
6
|
+
|
|
5
7
|
Language packs for African-language programming: a consistent set of **logical programming concepts**, mapped to **native-language phrases**, with enough structure for tools to transpile to **JavaScript, Python, TypeScript, Go, and Rust**.
|
|
6
8
|
|
|
7
9
|
If you’re building an editor, a transpiler, a linter, or a learning tool, this repo is the shared “source of truth”.
|
|
8
10
|
|
|
11
|
+
Africa-first:
|
|
12
|
+
|
|
13
|
+
<p>
|
|
14
|
+
<img alt="Algeria" src="https://flagcdn.com/16x12/dz.png" width="16" height="12" />
|
|
15
|
+
<img alt="Angola" src="https://flagcdn.com/16x12/ao.png" width="16" height="12" />
|
|
16
|
+
<img alt="Benin" src="https://flagcdn.com/16x12/bj.png" width="16" height="12" />
|
|
17
|
+
<img alt="Botswana" src="https://flagcdn.com/16x12/bw.png" width="16" height="12" />
|
|
18
|
+
<img alt="Burkina Faso" src="https://flagcdn.com/16x12/bf.png" width="16" height="12" />
|
|
19
|
+
<img alt="Burundi" src="https://flagcdn.com/16x12/bi.png" width="16" height="12" />
|
|
20
|
+
<img alt="Cabo Verde" src="https://flagcdn.com/16x12/cv.png" width="16" height="12" />
|
|
21
|
+
<img alt="Cameroon" src="https://flagcdn.com/16x12/cm.png" width="16" height="12" />
|
|
22
|
+
<img alt="Central African Republic" src="https://flagcdn.com/16x12/cf.png" width="16" height="12" />
|
|
23
|
+
<img alt="Chad" src="https://flagcdn.com/16x12/td.png" width="16" height="12" />
|
|
24
|
+
<img alt="Comoros" src="https://flagcdn.com/16x12/km.png" width="16" height="12" />
|
|
25
|
+
<img alt="Congo (Republic)" src="https://flagcdn.com/16x12/cg.png" width="16" height="12" />
|
|
26
|
+
<img alt="Congo (DRC)" src="https://flagcdn.com/16x12/cd.png" width="16" height="12" />
|
|
27
|
+
<img alt="Djibouti" src="https://flagcdn.com/16x12/dj.png" width="16" height="12" />
|
|
28
|
+
<img alt="Egypt" src="https://flagcdn.com/16x12/eg.png" width="16" height="12" />
|
|
29
|
+
<img alt="Equatorial Guinea" src="https://flagcdn.com/16x12/gq.png" width="16" height="12" />
|
|
30
|
+
<img alt="Eritrea" src="https://flagcdn.com/16x12/er.png" width="16" height="12" />
|
|
31
|
+
<img alt="Eswatini" src="https://flagcdn.com/16x12/sz.png" width="16" height="12" />
|
|
32
|
+
<img alt="Ethiopia" src="https://flagcdn.com/16x12/et.png" width="16" height="12" />
|
|
33
|
+
<img alt="Gabon" src="https://flagcdn.com/16x12/ga.png" width="16" height="12" />
|
|
34
|
+
<img alt="Gambia" src="https://flagcdn.com/16x12/gm.png" width="16" height="12" />
|
|
35
|
+
<img alt="Ghana" src="https://flagcdn.com/16x12/gh.png" width="16" height="12" />
|
|
36
|
+
<img alt="Guinea" src="https://flagcdn.com/16x12/gn.png" width="16" height="12" />
|
|
37
|
+
<img alt="Guinea-Bissau" src="https://flagcdn.com/16x12/gw.png" width="16" height="12" />
|
|
38
|
+
<img alt="Ivory Coast" src="https://flagcdn.com/16x12/ci.png" width="16" height="12" />
|
|
39
|
+
<img alt="Kenya" src="https://flagcdn.com/16x12/ke.png" width="16" height="12" />
|
|
40
|
+
<img alt="Lesotho" src="https://flagcdn.com/16x12/ls.png" width="16" height="12" />
|
|
41
|
+
<img alt="Liberia" src="https://flagcdn.com/16x12/lr.png" width="16" height="12" />
|
|
42
|
+
<img alt="Libya" src="https://flagcdn.com/16x12/ly.png" width="16" height="12" />
|
|
43
|
+
<img alt="Madagascar" src="https://flagcdn.com/16x12/mg.png" width="16" height="12" />
|
|
44
|
+
<img alt="Malawi" src="https://flagcdn.com/16x12/mw.png" width="16" height="12" />
|
|
45
|
+
<img alt="Mali" src="https://flagcdn.com/16x12/ml.png" width="16" height="12" />
|
|
46
|
+
<img alt="Mauritania" src="https://flagcdn.com/16x12/mr.png" width="16" height="12" />
|
|
47
|
+
<img alt="Mauritius" src="https://flagcdn.com/16x12/mu.png" width="16" height="12" />
|
|
48
|
+
<img alt="Morocco" src="https://flagcdn.com/16x12/ma.png" width="16" height="12" />
|
|
49
|
+
<img alt="Mozambique" src="https://flagcdn.com/16x12/mz.png" width="16" height="12" />
|
|
50
|
+
<img alt="Namibia" src="https://flagcdn.com/16x12/na.png" width="16" height="12" />
|
|
51
|
+
<img alt="Niger" src="https://flagcdn.com/16x12/ne.png" width="16" height="12" />
|
|
52
|
+
<img alt="Nigeria" src="https://flagcdn.com/16x12/ng.png" width="16" height="12" />
|
|
53
|
+
<img alt="Rwanda" src="https://flagcdn.com/16x12/rw.png" width="16" height="12" />
|
|
54
|
+
<img alt="São Tomé and Príncipe" src="https://flagcdn.com/16x12/st.png" width="16" height="12" />
|
|
55
|
+
<img alt="Senegal" src="https://flagcdn.com/16x12/sn.png" width="16" height="12" />
|
|
56
|
+
<img alt="Seychelles" src="https://flagcdn.com/16x12/sc.png" width="16" height="12" />
|
|
57
|
+
<img alt="Sierra Leone" src="https://flagcdn.com/16x12/sl.png" width="16" height="12" />
|
|
58
|
+
<img alt="Somalia" src="https://flagcdn.com/16x12/so.png" width="16" height="12" />
|
|
59
|
+
<img alt="South Africa" src="https://flagcdn.com/16x12/za.png" width="16" height="12" />
|
|
60
|
+
<img alt="South Sudan" src="https://flagcdn.com/16x12/ss.png" width="16" height="12" />
|
|
61
|
+
<img alt="Sudan" src="https://flagcdn.com/16x12/sd.png" width="16" height="12" />
|
|
62
|
+
<img alt="Tanzania" src="https://flagcdn.com/16x12/tz.png" width="16" height="12" />
|
|
63
|
+
<img alt="Togo" src="https://flagcdn.com/16x12/tg.png" width="16" height="12" />
|
|
64
|
+
<img alt="Tunisia" src="https://flagcdn.com/16x12/tn.png" width="16" height="12" />
|
|
65
|
+
<img alt="Uganda" src="https://flagcdn.com/16x12/ug.png" width="16" height="12" />
|
|
66
|
+
<img alt="Zambia" src="https://flagcdn.com/16x12/zm.png" width="16" height="12" />
|
|
67
|
+
<img alt="Zimbabwe" src="https://flagcdn.com/16x12/zw.png" width="16" height="12" />
|
|
68
|
+
</p>
|
|
69
|
+
|
|
9
70
|
## Why this exists (the gap we’re filling)
|
|
10
71
|
|
|
11
72
|
Most tools that try “programming in African languages” run into the same wall:
|
|
@@ -23,12 +84,21 @@ This project is our attempt to fix that properly:
|
|
|
23
84
|
## What’s in this repo
|
|
24
85
|
|
|
25
86
|
- **25 shipped African language packs** (and a roadmap for more)
|
|
26
|
-
- **
|
|
87
|
+
- **112 logical tokens** that every pack maps (shared across all programming targets)
|
|
27
88
|
- **Schemas + validation** to keep packs consistent
|
|
28
89
|
- **Coverage checks** against official keyword lists for each target language
|
|
29
90
|
|
|
30
91
|
The data lives under [`packs/`](./packs/). The package published to npm is `@kolanut/language-packs`.
|
|
31
92
|
|
|
93
|
+
## How it fits together
|
|
94
|
+
|
|
95
|
+
In short:
|
|
96
|
+
|
|
97
|
+
- **Logical token registry**: a shared list of concepts (the “meaning layer”)
|
|
98
|
+
- **Official keyword lists**: spec-backed reserved words for each target language
|
|
99
|
+
- **African language packs**: native-language phrases mapped to those concepts
|
|
100
|
+
- **Validation**: ensures packs are complete and spec coverage stays at 0 gaps
|
|
101
|
+
|
|
32
102
|
<!-- metrics:start -->
|
|
33
103
|
|
|
34
104
|
## At a glance
|
|
@@ -37,7 +107,7 @@ The data lives under [`packs/`](./packs/). The package published to npm is `@kol
|
|
|
37
107
|
|---|---:|---:|---|
|
|
38
108
|
| **African language packs** | 25 | +40 | [`packs/coverage-summary.json`](./packs/coverage-summary.json) · [`packs/languages-roadmap.json`](./packs/languages-roadmap.json) |
|
|
39
109
|
| **Programming targets** | 5 | +9 | [`packs/coverage-summary.json`](./packs/coverage-summary.json) · [`packs/languages-roadmap.json`](./packs/languages-roadmap.json) |
|
|
40
|
-
| **Logical tokens** |
|
|
110
|
+
| **Logical tokens** | 112 | — | [`packs/logical-tokens.json`](./packs/logical-tokens.json) |
|
|
41
111
|
| **Keyword coverage gaps** | 0 | — | [`packs/coverage-summary.json`](./packs/coverage-summary.json) |
|
|
42
112
|
|
|
43
113
|
<!-- metrics:end -->
|
|
@@ -49,13 +119,13 @@ Source of truth: [`packs/coverage-summary.json`](./packs/coverage-summary.json)
|
|
|
49
119
|
|
|
50
120
|
| Target | Spec keywords | Mapped | Gaps | Score |
|
|
51
121
|
|--------|-------------:|-------:|-----:|------:|
|
|
52
|
-
| JavaScript | 38 |
|
|
53
|
-
| Python | 39 |
|
|
54
|
-
| TypeScript |
|
|
122
|
+
| JavaScript | 38 | 38 | 0 | 100% |
|
|
123
|
+
| Python | 39 | 39 | 0 | 100% |
|
|
124
|
+
| TypeScript | 79 tracked† | 79 | 0 | 100% |
|
|
55
125
|
| Go | 25 | 25 | 0 | 100% |
|
|
56
|
-
| Rust | 39 |
|
|
126
|
+
| Rust | 39 | 39 | 0 | 100% |
|
|
57
127
|
|
|
58
|
-
†TypeScript has no single official keyword count in the Handbook;
|
|
128
|
+
†TypeScript has no single official keyword count in the Handbook; 79 is our tracked reserved/modifier + type-keyword set for coverage (see notes in `official-target-keywords.json`).
|
|
59
129
|
|
|
60
130
|
## Spec sources (traceable and linkable)
|
|
61
131
|
|
|
@@ -65,7 +135,7 @@ Source of truth: [`packs/official-target-keywords.json`](./packs/official-target
|
|
|
65
135
|
|--------|-------------:|------------|
|
|
66
136
|
| JavaScript | 38 | [ECMA-262 §12.7.2 ReservedWord](https://tc39.es/ecma262/#sec-keywords-and-reserved-words) |
|
|
67
137
|
| Python | 39 | [Python 3.12 — keywords](https://docs.python.org/3/reference/lexical_analysis.html#keywords) (35 hard + 4 soft) |
|
|
68
|
-
| TypeScript |
|
|
138
|
+
| TypeScript | 79 tracked† | [TypeScript Handbook](https://www.typescriptlang.org/docs/handbook/intro.html) (no official count) |
|
|
69
139
|
| Go | 25 | [Go spec — Keywords](https://go.dev/ref/spec#Keywords) |
|
|
70
140
|
| Rust | 39 | [Rust Reference — strict keywords](https://doc.rust-lang.org/reference/keywords.html) |
|
|
71
141
|
|
|
@@ -84,7 +154,18 @@ const packs = await listPackNames(); // e.g. 25 packs
|
|
|
84
154
|
|
|
85
155
|
const yoruba = await loadPack('yoruba');
|
|
86
156
|
const keywords = flattenKeywords(yoruba);
|
|
87
|
-
// { IF: ['ṣé', 'if'], FOR: ['fun', 'for'], ... } — maps
|
|
157
|
+
// { IF: ['ṣé', 'if'], FOR: ['fun', 'for'], ... } — maps 112 logical tokens
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Example: English keywords vs localized phrases (illustrative)
|
|
161
|
+
|
|
162
|
+
Most tools use this package as a **mapping layer**: the official keyword stays the same, but the UI (or source language) can present a localized phrase as an alias.
|
|
163
|
+
|
|
164
|
+
Example (Nigerian Pidgin, illustrative — exact phrases live in the pack):
|
|
165
|
+
|
|
166
|
+
```text
|
|
167
|
+
IF → "if case say"
|
|
168
|
+
PRINT → "show for screen"
|
|
88
169
|
```
|
|
89
170
|
|
|
90
171
|
## Use the raw JSON (no TS required)
|
|
@@ -92,7 +173,7 @@ const keywords = flattenKeywords(yoruba);
|
|
|
92
173
|
If you prefer to consume JSON directly (Rust/Go/Python/CLI tools), start here:
|
|
93
174
|
|
|
94
175
|
- [`packs/index.json`](./packs/index.json): pack manifest (locale, region, countries, status)
|
|
95
|
-
- [`packs/logical-tokens.json`](./packs/logical-tokens.json): the
|
|
176
|
+
- [`packs/logical-tokens.json`](./packs/logical-tokens.json): the 112-token registry (the thing packs must fully map)
|
|
96
177
|
- [`packs/by-country.json`](./packs/by-country.json): `NG` → `["yoruba", "igbo", ...]`
|
|
97
178
|
- [`packs/by-region.json`](./packs/by-region.json): region → pack names
|
|
98
179
|
- [`packs/coverage-summary.json`](./packs/coverage-summary.json): auto-generated coverage report
|
|
@@ -103,44 +184,44 @@ If you prefer to consume JSON directly (Rust/Go/Python/CLI tools), start here:
|
|
|
103
184
|
These are the packs currently shipped in v0.1.
|
|
104
185
|
|
|
105
186
|
- Flags are shown for the **primary locale** (quick scanning). Many packs apply to multiple countries—see [`packs/index.json`](./packs/index.json) for the full list.
|
|
106
|
-
-
|
|
187
|
+
- We use **Twemoji flag images** (not emoji characters) so the flags render reliably on both GitHub and npm.
|
|
107
188
|
|
|
108
189
|
**West Africa**
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
-
|
|
113
|
-
-
|
|
114
|
-
-
|
|
115
|
-
-
|
|
116
|
-
-
|
|
117
|
-
-
|
|
190
|
+
- <img alt="NG" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1f3-1f1ec.svg" width="16" height="16" /> Yorùbá (`yo-NG`)
|
|
191
|
+
- <img alt="NG" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1f3-1f1ec.svg" width="16" height="16" /> Nigerian Pidgin (`pcm-NG`)
|
|
192
|
+
- <img alt="NG" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1f3-1f1ec.svg" width="16" height="16" /> Hausa (`ha-NG`)
|
|
193
|
+
- <img alt="NG" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1f3-1f1ec.svg" width="16" height="16" /> Igbo (`ig-NG`)
|
|
194
|
+
- <img alt="NG" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1f3-1f1ec.svg" width="16" height="16" /> Fulfulde (`ff-NG`)
|
|
195
|
+
- <img alt="ML" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1f2-1f1f1.svg" width="16" height="16" /> Bambara (`bm-ML`)
|
|
196
|
+
- <img alt="GH" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1ec-1f1ed.svg" width="16" height="16" /> Twi (`tw-GH`)
|
|
197
|
+
- <img alt="SN" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1f8-1f1f3.svg" width="16" height="16" /> Wolof (`wo-SN`)
|
|
198
|
+
- <img alt="SN" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1f8-1f1f3.svg" width="16" height="16" /> French (Africa) (`fr-SN`)
|
|
118
199
|
|
|
119
200
|
**East Africa**
|
|
120
|
-
-
|
|
121
|
-
-
|
|
122
|
-
-
|
|
123
|
-
-
|
|
124
|
-
-
|
|
125
|
-
-
|
|
201
|
+
- <img alt="KE" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1f0-1f1ea.svg" width="16" height="16" /> Swahili (`sw-KE`)
|
|
202
|
+
- <img alt="ET" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1ea-1f1f9.svg" width="16" height="16" /> Amharic (`am-ET`)
|
|
203
|
+
- <img alt="ET" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1ea-1f1f9.svg" width="16" height="16" /> Oromo (`om-ET`)
|
|
204
|
+
- <img alt="ER" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1ea-1f1f7.svg" width="16" height="16" /> Tigrinya (`ti-ER`)
|
|
205
|
+
- <img alt="RW" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1f7-1f1fc.svg" width="16" height="16" /> Kinyarwanda (`rw-RW`)
|
|
206
|
+
- <img alt="UG" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1fa-1f1ec.svg" width="16" height="16" /> Luganda (`lg-UG`)
|
|
126
207
|
|
|
127
208
|
**Central Africa**
|
|
128
|
-
-
|
|
209
|
+
- <img alt="CD" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1e8-1f1e9.svg" width="16" height="16" /> Lingala (`ln-CD`)
|
|
129
210
|
|
|
130
211
|
**Horn of Africa**
|
|
131
|
-
-
|
|
212
|
+
- <img alt="SO" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1f8-1f1f4.svg" width="16" height="16" /> Somali (`so-SO`)
|
|
132
213
|
|
|
133
214
|
**North / East Africa**
|
|
134
|
-
-
|
|
215
|
+
- <img alt="EG" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1ea-1f1ec.svg" width="16" height="16" /> Arabic (Africa) (`ar-EG`)
|
|
135
216
|
|
|
136
217
|
**Southern Africa**
|
|
137
|
-
-
|
|
138
|
-
-
|
|
139
|
-
-
|
|
140
|
-
-
|
|
141
|
-
-
|
|
142
|
-
-
|
|
143
|
-
-
|
|
218
|
+
- <img alt="ZA" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1ff-1f1e6.svg" width="16" height="16" /> isiZulu (`zu-ZA`)
|
|
219
|
+
- <img alt="ZA" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1ff-1f1e6.svg" width="16" height="16" /> isiXhosa (`xh-ZA`)
|
|
220
|
+
- <img alt="ZA" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1ff-1f1e6.svg" width="16" height="16" /> Afrikaans (`af-ZA`)
|
|
221
|
+
- <img alt="LS" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1f1-1f1f8.svg" width="16" height="16" /> Sesotho (`st-LS`)
|
|
222
|
+
- <img alt="BW" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1e7-1f1fc.svg" width="16" height="16" /> Setswana (`tn-BW`)
|
|
223
|
+
- <img alt="ZW" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1ff-1f1fc.svg" width="16" height="16" /> Shona (`sn-ZW`)
|
|
224
|
+
- <img alt="AO" src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/svg/1f1e6-1f1f4.svg" width="16" height="16" /> Portuguese (Africa) (`pt-AO`)
|
|
144
225
|
|
|
145
226
|
Full metadata (including all countries per pack): [`packs/index.json`](./packs/index.json).
|
|
146
227
|
|
|
@@ -152,10 +233,14 @@ If you care about linguistic accuracy or preferred terminology for a specific co
|
|
|
152
233
|
|
|
153
234
|
## Roadmap (what’s next)
|
|
154
235
|
|
|
155
|
-
We track
|
|
236
|
+
We track roadmaps in [`packs/languages-roadmap.json`](./packs/languages-roadmap.json):
|
|
156
237
|
|
|
157
|
-
- **Planned African languages** (by region + priority)
|
|
158
|
-
- **Planned programming targets
|
|
238
|
+
- **Planned African languages** (by region + priority) — 40 more packs on the list
|
|
239
|
+
- **Planned programming targets** — C, C++, Java, C#, Kotlin, Swift, Dart, Ruby, PHP (one target per release; sample keywords + checklist in the JSON)
|
|
240
|
+
- **Planned logical tokens** — `GEN` (Rust 2024), `LAZY` (Python 3.15 / PEP 810) → target **v0.2.0**
|
|
241
|
+
- **Planned token tier** — stdlib / builtins (`len`, `map`, `Array`, `fmt`, …) → target **v2.0.0** (design-first; not required for beginner keyword transpilation)
|
|
242
|
+
|
|
243
|
+
Suggested release sequence (also in the JSON): **v0.1.x** (current) → **v0.2.0** (GEN/LAZY) → **v0.3.0+** (new targets, one at a time) → **v2.0.0** (stdlib tier).
|
|
159
244
|
|
|
160
245
|
Regional focus (how we’re sequencing the work):
|
|
161
246
|
|
|
@@ -173,7 +258,7 @@ High-priority upcoming packs currently include:
|
|
|
173
258
|
Contributions are welcome—especially from native speakers and educators.
|
|
174
259
|
|
|
175
260
|
- **Improve an existing pack**: add better phrasing, aliases for dialects, or clearer scope notes
|
|
176
|
-
- **Add a new pack**: follow the template, map all
|
|
261
|
+
- **Add a new pack**: follow the template, map all 112 tokens, and run validation
|
|
177
262
|
|
|
178
263
|
Before contributing, please read [`packs/PACK_SCOPE.md`](./packs/PACK_SCOPE.md). It explains:
|
|
179
264
|
|
|
@@ -193,6 +278,13 @@ npm run build
|
|
|
193
278
|
|
|
194
279
|
Full guide: [`CONTRIBUTING.md`](./CONTRIBUTING.md).
|
|
195
280
|
|
|
281
|
+
### Contribution flow (quick)
|
|
282
|
+
|
|
283
|
+
1. Choose a pack scope (or create a new variant)
|
|
284
|
+
2. Translate tokens (use aliases for dialect differences)
|
|
285
|
+
3. Run `npm test` (validate + coverage)
|
|
286
|
+
4. Open a PR for native-speaker review
|
|
287
|
+
|
|
196
288
|
## Contributors
|
|
197
289
|
|
|
198
290
|
This project only works if real people show up with real language knowledge. Thank you to everyone who’s contributed time, expertise, and care.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolanut/language-packs",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Community-governed keyword maps for native African language programming — by Kolanut Technologies",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Kolanut Technologies Ltd (https://kolacode.africa)",
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
"files": [
|
|
19
19
|
"dist",
|
|
20
20
|
"packs",
|
|
21
|
-
"badges",
|
|
22
21
|
"pack.schema.json",
|
|
23
22
|
"LICENSE",
|
|
24
23
|
"README.md",
|
|
@@ -314,6 +314,45 @@
|
|
|
314
314
|
"SATISFIES": [
|
|
315
315
|
"satisfies"
|
|
316
316
|
],
|
|
317
|
+
"ANY": [
|
|
318
|
+
"any"
|
|
319
|
+
],
|
|
320
|
+
"BOOLEAN": [
|
|
321
|
+
"boolean"
|
|
322
|
+
],
|
|
323
|
+
"NUMBER": [
|
|
324
|
+
"number"
|
|
325
|
+
],
|
|
326
|
+
"STRING": [
|
|
327
|
+
"string"
|
|
328
|
+
],
|
|
329
|
+
"SYMBOL": [
|
|
330
|
+
"symbol"
|
|
331
|
+
],
|
|
332
|
+
"OBJECT": [
|
|
333
|
+
"object"
|
|
334
|
+
],
|
|
335
|
+
"NEVER": [
|
|
336
|
+
"never"
|
|
337
|
+
],
|
|
338
|
+
"UNKNOWN": [
|
|
339
|
+
"unknown"
|
|
340
|
+
],
|
|
341
|
+
"BIGINT": [
|
|
342
|
+
"bigint"
|
|
343
|
+
],
|
|
344
|
+
"CONSTRUCTOR": [
|
|
345
|
+
"constructor"
|
|
346
|
+
],
|
|
347
|
+
"REQUIRE": [
|
|
348
|
+
"require"
|
|
349
|
+
],
|
|
350
|
+
"USING": [
|
|
351
|
+
"using"
|
|
352
|
+
],
|
|
353
|
+
"OF": [
|
|
354
|
+
"of"
|
|
355
|
+
],
|
|
317
356
|
"DYN": [
|
|
318
357
|
"dyn"
|
|
319
358
|
],
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"regions": [
|
|
10
10
|
"Southern Africa"
|
|
11
11
|
],
|
|
12
|
-
"version": "0.1.
|
|
12
|
+
"version": "0.1.1",
|
|
13
13
|
"displayName": "Afrikaans",
|
|
14
14
|
"description": "Afrikaans keyword map — starter pack (community contributions welcome)",
|
|
15
15
|
"reviewStatus": "starter",
|
|
@@ -339,6 +339,45 @@
|
|
|
339
339
|
"SATISFIES": [
|
|
340
340
|
"satisfies"
|
|
341
341
|
],
|
|
342
|
+
"ANY": [
|
|
343
|
+
"any"
|
|
344
|
+
],
|
|
345
|
+
"BOOLEAN": [
|
|
346
|
+
"boolean"
|
|
347
|
+
],
|
|
348
|
+
"NUMBER": [
|
|
349
|
+
"number"
|
|
350
|
+
],
|
|
351
|
+
"STRING": [
|
|
352
|
+
"string"
|
|
353
|
+
],
|
|
354
|
+
"SYMBOL": [
|
|
355
|
+
"symbol"
|
|
356
|
+
],
|
|
357
|
+
"OBJECT": [
|
|
358
|
+
"object"
|
|
359
|
+
],
|
|
360
|
+
"NEVER": [
|
|
361
|
+
"never"
|
|
362
|
+
],
|
|
363
|
+
"UNKNOWN": [
|
|
364
|
+
"unknown"
|
|
365
|
+
],
|
|
366
|
+
"BIGINT": [
|
|
367
|
+
"bigint"
|
|
368
|
+
],
|
|
369
|
+
"CONSTRUCTOR": [
|
|
370
|
+
"constructor"
|
|
371
|
+
],
|
|
372
|
+
"REQUIRE": [
|
|
373
|
+
"require"
|
|
374
|
+
],
|
|
375
|
+
"USING": [
|
|
376
|
+
"using"
|
|
377
|
+
],
|
|
378
|
+
"OF": [
|
|
379
|
+
"of"
|
|
380
|
+
],
|
|
342
381
|
"DYN": [
|
|
343
382
|
"dyn"
|
|
344
383
|
],
|
|
@@ -314,6 +314,45 @@
|
|
|
314
314
|
"SATISFIES": [
|
|
315
315
|
"satisfies"
|
|
316
316
|
],
|
|
317
|
+
"ANY": [
|
|
318
|
+
"any"
|
|
319
|
+
],
|
|
320
|
+
"BOOLEAN": [
|
|
321
|
+
"boolean"
|
|
322
|
+
],
|
|
323
|
+
"NUMBER": [
|
|
324
|
+
"number"
|
|
325
|
+
],
|
|
326
|
+
"STRING": [
|
|
327
|
+
"string"
|
|
328
|
+
],
|
|
329
|
+
"SYMBOL": [
|
|
330
|
+
"symbol"
|
|
331
|
+
],
|
|
332
|
+
"OBJECT": [
|
|
333
|
+
"object"
|
|
334
|
+
],
|
|
335
|
+
"NEVER": [
|
|
336
|
+
"never"
|
|
337
|
+
],
|
|
338
|
+
"UNKNOWN": [
|
|
339
|
+
"unknown"
|
|
340
|
+
],
|
|
341
|
+
"BIGINT": [
|
|
342
|
+
"bigint"
|
|
343
|
+
],
|
|
344
|
+
"CONSTRUCTOR": [
|
|
345
|
+
"constructor"
|
|
346
|
+
],
|
|
347
|
+
"REQUIRE": [
|
|
348
|
+
"require"
|
|
349
|
+
],
|
|
350
|
+
"USING": [
|
|
351
|
+
"using"
|
|
352
|
+
],
|
|
353
|
+
"OF": [
|
|
354
|
+
"of"
|
|
355
|
+
],
|
|
317
356
|
"DYN": [
|
|
318
357
|
"dyn"
|
|
319
358
|
],
|
package/packs/amharic/pack.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"regions": [
|
|
9
9
|
"East Africa"
|
|
10
10
|
],
|
|
11
|
-
"version": "0.1.
|
|
11
|
+
"version": "0.1.1",
|
|
12
12
|
"displayName": "Amharic",
|
|
13
13
|
"description": "Amharic keyword map — starter pack (community contributions welcome)",
|
|
14
14
|
"reviewStatus": "starter",
|
|
@@ -338,6 +338,45 @@
|
|
|
338
338
|
"SATISFIES": [
|
|
339
339
|
"satisfies"
|
|
340
340
|
],
|
|
341
|
+
"ANY": [
|
|
342
|
+
"any"
|
|
343
|
+
],
|
|
344
|
+
"BOOLEAN": [
|
|
345
|
+
"boolean"
|
|
346
|
+
],
|
|
347
|
+
"NUMBER": [
|
|
348
|
+
"number"
|
|
349
|
+
],
|
|
350
|
+
"STRING": [
|
|
351
|
+
"string"
|
|
352
|
+
],
|
|
353
|
+
"SYMBOL": [
|
|
354
|
+
"symbol"
|
|
355
|
+
],
|
|
356
|
+
"OBJECT": [
|
|
357
|
+
"object"
|
|
358
|
+
],
|
|
359
|
+
"NEVER": [
|
|
360
|
+
"never"
|
|
361
|
+
],
|
|
362
|
+
"UNKNOWN": [
|
|
363
|
+
"unknown"
|
|
364
|
+
],
|
|
365
|
+
"BIGINT": [
|
|
366
|
+
"bigint"
|
|
367
|
+
],
|
|
368
|
+
"CONSTRUCTOR": [
|
|
369
|
+
"constructor"
|
|
370
|
+
],
|
|
371
|
+
"REQUIRE": [
|
|
372
|
+
"require"
|
|
373
|
+
],
|
|
374
|
+
"USING": [
|
|
375
|
+
"using"
|
|
376
|
+
],
|
|
377
|
+
"OF": [
|
|
378
|
+
"of"
|
|
379
|
+
],
|
|
341
380
|
"DYN": [
|
|
342
381
|
"dyn"
|
|
343
382
|
],
|
|
@@ -314,6 +314,45 @@
|
|
|
314
314
|
"SATISFIES": [
|
|
315
315
|
"satisfies"
|
|
316
316
|
],
|
|
317
|
+
"ANY": [
|
|
318
|
+
"any"
|
|
319
|
+
],
|
|
320
|
+
"BOOLEAN": [
|
|
321
|
+
"boolean"
|
|
322
|
+
],
|
|
323
|
+
"NUMBER": [
|
|
324
|
+
"number"
|
|
325
|
+
],
|
|
326
|
+
"STRING": [
|
|
327
|
+
"string"
|
|
328
|
+
],
|
|
329
|
+
"SYMBOL": [
|
|
330
|
+
"symbol"
|
|
331
|
+
],
|
|
332
|
+
"OBJECT": [
|
|
333
|
+
"object"
|
|
334
|
+
],
|
|
335
|
+
"NEVER": [
|
|
336
|
+
"never"
|
|
337
|
+
],
|
|
338
|
+
"UNKNOWN": [
|
|
339
|
+
"unknown"
|
|
340
|
+
],
|
|
341
|
+
"BIGINT": [
|
|
342
|
+
"bigint"
|
|
343
|
+
],
|
|
344
|
+
"CONSTRUCTOR": [
|
|
345
|
+
"constructor"
|
|
346
|
+
],
|
|
347
|
+
"REQUIRE": [
|
|
348
|
+
"require"
|
|
349
|
+
],
|
|
350
|
+
"USING": [
|
|
351
|
+
"using"
|
|
352
|
+
],
|
|
353
|
+
"OF": [
|
|
354
|
+
"of"
|
|
355
|
+
],
|
|
317
356
|
"DYN": [
|
|
318
357
|
"dyn"
|
|
319
358
|
],
|
package/packs/arabic/pack.json
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"North Africa",
|
|
19
19
|
"East Africa"
|
|
20
20
|
],
|
|
21
|
-
"version": "0.1.
|
|
21
|
+
"version": "0.1.1",
|
|
22
22
|
"displayName": "Arabic",
|
|
23
23
|
"description": "Arabic keyword map for North and East Africa — starter pack",
|
|
24
24
|
"reviewStatus": "starter",
|
|
@@ -348,6 +348,45 @@
|
|
|
348
348
|
"SATISFIES": [
|
|
349
349
|
"satisfies"
|
|
350
350
|
],
|
|
351
|
+
"ANY": [
|
|
352
|
+
"any"
|
|
353
|
+
],
|
|
354
|
+
"BOOLEAN": [
|
|
355
|
+
"boolean"
|
|
356
|
+
],
|
|
357
|
+
"NUMBER": [
|
|
358
|
+
"number"
|
|
359
|
+
],
|
|
360
|
+
"STRING": [
|
|
361
|
+
"string"
|
|
362
|
+
],
|
|
363
|
+
"SYMBOL": [
|
|
364
|
+
"symbol"
|
|
365
|
+
],
|
|
366
|
+
"OBJECT": [
|
|
367
|
+
"object"
|
|
368
|
+
],
|
|
369
|
+
"NEVER": [
|
|
370
|
+
"never"
|
|
371
|
+
],
|
|
372
|
+
"UNKNOWN": [
|
|
373
|
+
"unknown"
|
|
374
|
+
],
|
|
375
|
+
"BIGINT": [
|
|
376
|
+
"bigint"
|
|
377
|
+
],
|
|
378
|
+
"CONSTRUCTOR": [
|
|
379
|
+
"constructor"
|
|
380
|
+
],
|
|
381
|
+
"REQUIRE": [
|
|
382
|
+
"require"
|
|
383
|
+
],
|
|
384
|
+
"USING": [
|
|
385
|
+
"using"
|
|
386
|
+
],
|
|
387
|
+
"OF": [
|
|
388
|
+
"of"
|
|
389
|
+
],
|
|
351
390
|
"DYN": [
|
|
352
391
|
"dyn"
|
|
353
392
|
],
|
|
@@ -284,6 +284,45 @@
|
|
|
284
284
|
"SATISFIES": [
|
|
285
285
|
"satisfies"
|
|
286
286
|
],
|
|
287
|
+
"ANY": [
|
|
288
|
+
"any"
|
|
289
|
+
],
|
|
290
|
+
"BOOLEAN": [
|
|
291
|
+
"boolean"
|
|
292
|
+
],
|
|
293
|
+
"NUMBER": [
|
|
294
|
+
"number"
|
|
295
|
+
],
|
|
296
|
+
"STRING": [
|
|
297
|
+
"string"
|
|
298
|
+
],
|
|
299
|
+
"SYMBOL": [
|
|
300
|
+
"symbol"
|
|
301
|
+
],
|
|
302
|
+
"OBJECT": [
|
|
303
|
+
"object"
|
|
304
|
+
],
|
|
305
|
+
"NEVER": [
|
|
306
|
+
"never"
|
|
307
|
+
],
|
|
308
|
+
"UNKNOWN": [
|
|
309
|
+
"unknown"
|
|
310
|
+
],
|
|
311
|
+
"BIGINT": [
|
|
312
|
+
"bigint"
|
|
313
|
+
],
|
|
314
|
+
"CONSTRUCTOR": [
|
|
315
|
+
"constructor"
|
|
316
|
+
],
|
|
317
|
+
"REQUIRE": [
|
|
318
|
+
"require"
|
|
319
|
+
],
|
|
320
|
+
"USING": [
|
|
321
|
+
"using"
|
|
322
|
+
],
|
|
323
|
+
"OF": [
|
|
324
|
+
"of"
|
|
325
|
+
],
|
|
287
326
|
"DYN": [
|
|
288
327
|
"dyn"
|
|
289
328
|
],
|