# TODO

- [ ] deduplicate `src/ast.js`
- [ ] add i18n-comment, i18n-context, i18n-domain supporting attributes
 - [ ] prevent collisions between source/react child strings by bucketing messages
- [ ] support ICU MessageFormat syntax for:
 - [ ] pluralization
  - [ ] syntax validation
   - [ ] Pluralize contains Match
   - [ ] all necessary forms are present
  - [ ] extraction
 - [ ] gender
 - [ ] ordinal
- [ ] reorganize repo
 - [ ] reorganize `src/`
  - [ ] unify error handling
  - [ ] handle duplication between extract and other files
   - [ ] switch to all named exports
  - [ ] move bin scripts into `src/`
 - [ ] delete `jsxlate.js` and `lib/`
 - [ ] switch to monorepo layout w/ packages dir
- [ ] rewrite lint as plugin
 - [ ] could be part of transform plugin, looking for JSXText outside of element markers
- [ ] turn this into issues
- [ ] documentation
 - [ ] HOWTO
  - [ ] mark messages
  - [ ] extract messages
   - [ ] example of transifex?
  - [ ] create bundles
  - [ ] transform the source
 - [ ] syntax of messages
  - [ ] show examples of valid/invalid messages
 - [ ] integrate with React Intl
- [ ] configuration
 - [ ] for e.g. translator-accessible attributes
 - [ ] change name of marker function/component
- [ ] add tagName prop to <I18N> component to handle tricky situations like <option>
- [ ] investigate `i18n-msg` attribute to mark non-`<I18N>` components as message units
- [ ] “translator mode” support


# DONE

- [x] merge extract/translation validation
- [x] input/output from/to .pot/.po files
- [x] pluralization
 - [x] <Pluralize> / <Match> shown to translators, no ICU MessageFormat
- [x] rename `i18n-designation` attribute to `i18n-id`
- [x] tests and validation for multiple React components of same type within same marker
 - [x] will require `i18n-id` attributes if multiple
- [x] documentation
 - [x] glossary of terms
  - [x] message (unit)
  - [x] marker
  - [x] bundle
 - [x] implementation
  - [x] extraction
  - [x] transformation
  - [x] translation/bundling
- [x] restructuring/splitting of jsx-translator.js
 - [x] clean up exports
- [x] optimization
 - [x] rewrite entire package in terms of babel plugin API
 - [x] look into ways of not using allKeypathsInAst
