Skip to content

Commit 7e65347

Browse files
committed
Create ROADMAP.md
1 parent 6b92ee4 commit 7e65347

1 file changed

Lines changed: 113 additions & 0 deletions

File tree

ROADMAP.md

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
# langcodec Roadmap
2+
3+
This document outlines progressive, bite‑sized tasks to enhance langcodec and langcodec‑cli. It’s structured so we can pick items incrementally and track progress over time.
4+
5+
Legend: [ ] todo, [x] done, [~] in progress
6+
7+
## Recently Completed
8+
9+
- [x] Android `<plurals>` parse/write support (library)
10+
- [x] `.strings` writer escaping (quotes, backslashes, control chars)
11+
- [x] Symmetric language matching for multi‑language formats (`xcstrings`, `csv`, `tsv`)
12+
- [x] CLI view prints “Type: Plural” and plural categories
13+
- [x] Conversion tests: CSV→Android, XCStrings→Android (with plurals)
14+
15+
---
16+
17+
## M1. Quality & Safety
18+
19+
- [ ] Placeholder normalization and validation
20+
- [ ] Mapping between iOS (`%1$@`, `%d`) and Android (`%1$s`, `%d`)
21+
- [ ] Detect placeholder mismatches across languages; fail in strict mode, warn otherwise
22+
- [ ] Auto‑fix option for common cases (`%@``%s`, `%1$@``%1$s`)
23+
- [ ] Tests across `.strings`, Android, `.xcstrings`
24+
- [ ] Plural rules engine
25+
- [ ] CLDR‑driven required category sets per locale (few/many/etc.)
26+
- [ ] Validation pass: flag missing categories per key+locale
27+
- [ ] CLI: `view --check-plurals` and `validate` output
28+
- [ ] Strict vs. permissive parsing
29+
- [ ] Global setting in lib; CLI `--strict` flag
30+
- [ ] Consistent error surfaces with actionable context
31+
- [ ] Better error context
32+
- [ ] Include file path and entry id for parse/convert errors
33+
- [ ] (Optional) capture line/column when parser knows it
34+
35+
## M2. Formats
36+
37+
- [ ] Apple `.stringsdict` (plurals/select)
38+
- [ ] Flutter `.arb`
39+
- [ ] Gettext `.po`
40+
- [ ] XLIFF 1.2 / 2.0
41+
- [ ] (Later) ICU MessageFormat v2 (exploration)
42+
43+
For each new format:
44+
45+
- [ ] Implement `Parser` and conversions to/from `Resource`
46+
- [ ] Round‑trip tests + cross‑conversion tests
47+
- [ ] CLI convert + view coverage
48+
- [ ] README updates
49+
50+
## M3. CSV/TSV Schema
51+
52+
- [ ] Optional extended columns: `comment`, `status`, `context`, `developer_note`
53+
- [ ] CLI: `--schema` flag (e.g., `basic`, `extended`, custom mapping)
54+
- [ ] Lossless round‑trip for supported metadata
55+
- [ ] Tests to ensure consistent ordering and schema stability
56+
57+
## M4. CLI UX
58+
59+
- [ ] `diff` subcommand
60+
- [ ] Compare two files; output added/removed/changed keys by language
61+
- [ ] Machine‑readable JSON output and pretty mode
62+
- [ ] `stats` subcommand
63+
- [ ] Per‑language counts by `EntryStatus`, completion %, missing plurals
64+
- [ ] `normalize` subcommand
65+
- [ ] Canonicalize whitespace, escapes, key casing; optional rules
66+
- [ ] Filters and export
67+
- [ ] `view --where 'status=stale and lang in(en,fr)' --format csv`
68+
- [ ] `--grep` for key/value regex
69+
- [ ] Stdio support: `-` for stdin/stdout across commands
70+
- [ ] Config file: `langcodec.toml` for project defaults (langs, merge strategy, schema, placeholder policy)
71+
72+
## M5. Developer Experience
73+
74+
- [ ] API ergonomics
75+
- [ ] Borrowed iterators and helpers: `iter_keys()`, `iter_entries(lang)`
76+
- [ ] Mutators: `rename_key`, `bulk_rename`, `map_values`
77+
- [ ] Deterministic ordering everywhere (keys, languages)
78+
- [ ] Provenance tracking (source file, optional line) per entry
79+
- [ ] Benchmarks (Criterion) for parse/convert/merge
80+
81+
## M6. Ecosystem & Distribution
82+
83+
- [ ] WASM target (browser/Node) for view/convert/diff in web tools
84+
- [ ] GitHub Action templates
85+
- [ ] Validate PRs, enforce placeholder policy, fail on regressions
86+
- [ ] Example workflows in `.github/workflows/examples/`
87+
- [ ] Documentation site
88+
- [ ] Task‑oriented guides (convert recipes, plural pitfalls, placeholder mapping)
89+
- [ ] API docs deep links; examples gallery
90+
91+
## Testing Strategy
92+
93+
- [ ] Start with unit tests near each format parser/writer
94+
- [ ] Add conversion matrix tests for common paths (strings↔android↔xcstrings↔csv/tsv)
95+
- [ ] Property tests where feasible (e.g., round‑trip invariants)
96+
- [ ] Large sample corpora in `tests/data/` for regression
97+
98+
## Contribution Guide Enhancements
99+
100+
- [ ] Add coding standards and commit message conventions
101+
- [ ] Issue templates for formats vs CLI vs core
102+
- [ ] Local dev quickstart and common cargo commands
103+
104+
## Release Checklist (per minor)
105+
106+
- [ ] Update README Supported Formats table
107+
- [ ] Changelog highlights (breaking changes, new formats, CLI flags)
108+
- [ ] Version bumps in workspace `Cargo.toml` and README
109+
- [ ] Tag + GitHub release notes
110+
111+
---
112+
113+
If you pick up an item, feel free to mark it with [~] and open a PR referencing this roadmap.

0 commit comments

Comments
 (0)