diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..c16335b --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,73 @@ +# Copilot Instructions for sphinx-exercise + +## General Guidelines + +### Code Philosophy +- **Simplicity First**: Pursue simple code with low complexity when making changes +- **Maintainability**: Keep code modular and easy to understand +- **Minimal Dependencies**: Avoid adding unnecessary dependencies + +### Documentation Standards +- **Do NOT create summary documents** when making changes +- Instead, **update existing documents** where needed (README.md, docs/, etc.) +- Keep documentation in sync with code changes + +### Release Management +- **Review Documentation**: Before making any releases, please review all documentation in `docs/` +- **Update CHANGELOG.md**: Keep the CHANGELOG.md up to date with all significant changes +- **Release Notes**: Maintain detailed release information in `docs/releases/` +- Follow semantic versioning principles + +### Release Information Structure +Release documentation should be maintained in `docs/releases/` with the following structure: +- One file per version (e.g., `v0.5.0.md`) +- Link to releases from main documentation +- Include migration guides for breaking changes + +## Project-Specific Guidelines + +### Internationalization (i18n) +- Translation files are located in `sphinx_exercise/translations/` +- JSON source files: `sphinx_exercise/translations/jsons/` +- Compiled locale files: `sphinx_exercise/translations/locales/` +- Use `_convert.py` to regenerate locale files from JSON sources +- When adding new languages: + 1. Add translations to both `Exercise.json` and `Solution.json` + 2. Run `python sphinx_exercise/translations/_convert.py` to generate `.po` and `.mo` files + 3. Update documentation to mention new language support + +### Testing +- All changes should include appropriate tests +- Test files are in `tests/` directory +- Run tests before committing changes +- Maintain test coverage + +### Code Structure +- Main extension code: `sphinx_exercise/` +- Directives: `directive.py` +- Transforms: `transforms.py` and `post_transforms.py` +- LaTeX support: `latex.py` +- Node definitions: `nodes.py` + +### Documentation +- Main docs: `docs/source/` +- Build docs locally before committing documentation changes +- Ensure all examples work correctly +- Update syntax documentation when adding new features + +## Workflow + +1. **Before Starting**: Review relevant existing code and documentation +2. **During Development**: + - Write simple, clear code + - Update tests as needed + - Update existing documentation inline +3. **Before Committing**: + - Run tests + - Review documentation changes + - Update CHANGELOG.md if applicable +4. **Before Releasing**: + - Review all documentation in `docs/` + - Create release notes in `docs/releases/` + - Update CHANGELOG.md + - Verify all tests pass diff --git a/CHANGELOG.md b/CHANGELOG.md index 61fbbc6..441d937 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # Changelog +## [v1.1.0](https://github.com/executablebooks/sphinx-exercise/tree/v1.1.0) (TBD) + +### New ✨ + +- Added internationalization (i18n) support for 27 languages +- Added translations for Chinese, Japanese, Korean, Arabic, Hindi, Turkish, and expanded existing language support +- Extension now automatically detects Sphinx project language setting and displays appropriate translations + +### Improved 👌 + +- Reorganized and expanded translation files with alphabetical sorting +- Enhanced translation documentation with comprehensive guides +- Updated README and documentation to highlight internationalization features + +### Documentation 📚 + +- Added internationalization section to syntax documentation +- Updated README with i18n feature highlights +- Improved translation README with detailed contribution guidelines +- Created releases documentation structure in `docs/releases/` +- Added Copilot instructions for project maintenance + + +## [v1.0.1](https://github.com/executablebooks/sphinx-exercise/tree/v1.0.1) (2024-XX-XX) + +_No changelog available for this version._ ## [v1.0.1](https://github.com/executablebooks/sphinx-exercise/tree/v1.0.1) (2024-07-01) diff --git a/README.md b/README.md index 2f8230d..6945900 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,14 @@ This package contains a [Sphinx](http://www.sphinx-doc.org/en/master/) extension for producing exercise and solution directives. +## Features + +- **Automatic numbering** for exercises and solutions +- **Cross-referencing** support with `ref` and `numref` roles +- **Internationalization** support for 27 languages including Chinese, Japanese, Korean, Arabic, Hindi, and more +- **HTML and PDF** output support +- **Gated directive** syntax for including executable code and complex content +- **Customizable styling** with class options and hidden directive support ## Get started diff --git a/RELEASE.md b/RELEASE.md new file mode 100644 index 0000000..4c01d1d --- /dev/null +++ b/RELEASE.md @@ -0,0 +1,109 @@ +# Release Checklist for v1.1.0 + +This document provides the step-by-step process to release version 1.1.0 of sphinx-exercise. + +## Pre-Release Checklist + +- [ ] All tests pass locally +- [ ] All tests pass on CI +- [ ] Documentation builds successfully +- [ ] CHANGELOG.md is up to date with release date +- [ ] Version number updated in `sphinx_exercise/__init__.py` +- [ ] Release notes finalized in `docs/source/releases/v1.1.0.md` +- [ ] All PRs for this release are merged + +## Version Update + +Update the version number in: + +1. **`sphinx_exercise/__init__.py`**: + ```python + __version__ = "1.1.0" + ``` + +2. **`CHANGELOG.md`**: + - Replace `(TBD)` with the actual release date + - Change link to point to the release tag + +## Release Steps + +### 1. Create Release Commit + +```bash +# Ensure you're on main branch and up to date +git checkout main +git pull origin main + +# Update version in __init__.py +# Update CHANGELOG.md with release date +# Commit changes +git add sphinx_exercise/__init__.py CHANGELOG.md docs/source/releases/v1.1.0.md +git commit -m "Release v1.1.0" +``` + +### 2. Create Git Tag + +```bash +git tag -a v1.1.0 -m "Release version 1.1.0 - Internationalization support" +``` + +### 3. Push to GitHub + +```bash +git push origin main +git push origin v1.1.0 +``` + +### 4. Create GitHub Release + +1. Go to https://github.com/executablebooks/sphinx-exercise/releases/new +2. Select tag: `v1.1.0` +3. Release title: `v1.1.0 - Internationalization Support` +4. Description: Copy content from `docs/source/releases/v1.1.0.md` +5. Click "Publish release" + +### 5. Publish to PyPI + +```bash +# Clean previous builds +rm -rf dist/ build/ *.egg-info + +# Build distribution +python -m build + +# Upload to PyPI (requires PyPI credentials) +python -m twine upload dist/* +``` + +### 6. Update Documentation + +The documentation should automatically build from the new tag on ReadTheDocs. Verify at: +https://ebp-sphinx-exercise.readthedocs.io/en/latest/ + +### 7. Post-Release + +1. Update `docs/source/releases/index.md` to include v1.1.0 +2. Create new "Unreleased" section in CHANGELOG.md for future changes +3. Announce release on relevant channels + +## Version Numbering + +This project follows [Semantic Versioning](https://semver.org/): + +- **MAJOR** version for incompatible API changes +- **MINOR** version for new functionality in a backward compatible manner (this release) +- **PATCH** version for backward compatible bug fixes + +## Release Highlights for Announcement + +**sphinx-exercise v1.1.0** is now available! 🎉 + +This release adds comprehensive internationalization support: +- ✨ Support for 27 languages including Chinese, Japanese, Korean, Arabic, and Hindi +- 🌍 Automatic language detection from Sphinx configuration +- 📚 Enhanced documentation with i18n examples and contribution guides +- 🛠️ JSON-based translation system for easy community contributions + +Install or upgrade: `pip install --upgrade sphinx-exercise` + +Full release notes: https://github.com/executablebooks/sphinx-exercise/releases/tag/v1.1.0 diff --git a/docs/source/index.md b/docs/source/index.md index 402dc82..c6ed9de 100644 --- a/docs/source/index.md +++ b/docs/source/index.md @@ -5,6 +5,7 @@ install syntax +releases/index developer developer-design ``` @@ -32,6 +33,10 @@ The **solution** directive 1. supports options such as `class`, `label`, and `hidden` 2. can be referenced through `ref` role +**Internationalization**: + +`sphinx-exercise` supports 27 languages including Chinese, Japanese, Korean, Arabic, Hindi, Spanish, French, German, and more. The extension automatically uses the appropriate language based on your Sphinx project's `language` configuration. + (getting-started)= ## Getting Started diff --git a/docs/source/releases/index.md b/docs/source/releases/index.md new file mode 100644 index 0000000..c301282 --- /dev/null +++ b/docs/source/releases/index.md @@ -0,0 +1,11 @@ +# Release Notes + +This section contains detailed release notes for sphinx-exercise versions. + +```{toctree} +:maxdepth: 1 + +v1.1.0 +``` + +For a complete list of all changes across versions, see the [CHANGELOG](https://github.com/executablebooks/sphinx-exercise/blob/main/CHANGELOG.md). diff --git a/docs/source/releases/v1.1.0.md b/docs/source/releases/v1.1.0.md new file mode 100644 index 0000000..3a3a19a --- /dev/null +++ b/docs/source/releases/v1.1.0.md @@ -0,0 +1,99 @@ +# Release v1.1.0 + +**Release Date**: TBD + +This release adds comprehensive internationalization (i18n) support to sphinx-exercise, enabling the extension to display exercise and solution labels in 27 different languages. + +## ✨ New Features + +### Internationalization Support + +The extension now supports **27 languages** with automatic language detection: + +**East Asian**: Chinese (zh_CN), Japanese (ja), Korean (ko) + +**South Asian**: Bengali (bn), Hindi (hi), Tamil (ta) + +**Middle Eastern**: Arabic (ar), Turkish (tr) + +**European**: Czech (cs), Dutch (nl), French (fr), German (de), Greek (el), Hungarian (hu), Italian (it), Norwegian (no), Polish (pl), Portuguese (pt), Romanian (ro), Russian (ru), Spanish (es), Swedish (sv), Ukrainian (uk) + +**Southeast Asian**: Indonesian (id), Malay (ms), Vietnamese (vi) + +### Automatic Language Detection + +The extension automatically detects your Sphinx project's language configuration and applies the appropriate translations: + +```python +# conf.py +language = 'zh_CN' # Chinese +``` + +```yaml +# _config.yml (Jupyter Book) +sphinx: + config: + language: ja # Japanese +``` + +### Translation Examples + +With language configured, directive labels automatically translate: + +- **Spanish**: "Exercise" → "Ejercicio", "Solution to" → "Solución a" +- **Chinese**: "Exercise" → "练习", "Solution to" → "解答" +- **Japanese**: "Exercise" → "練習", "Solution to" → "解答" +- **French**: "Exercise" → "Exercice", "Solution to" → "Solution de" +- **German**: "Exercise" → "Übung", "Solution to" → "Lösung zu" +- **Arabic**: "Exercise" → "تمرين", "Solution to" → "الحل لـ" +- **Hindi**: "Exercise" → "अभ्यास", "Solution to" → "समाधान" + +## 👌 Improvements + +- **JSON-based translations**: Source translations stored in easy-to-edit JSON format +- **Alphabetical organization**: All language entries sorted alphabetically for maintainability +- **Automated build process**: Script to generate `.po` and `.mo` files from JSON sources +- **Enhanced documentation**: Comprehensive guides for using and contributing translations + +## 📚 Documentation Updates + +- Added internationalization section to [syntax guide](../syntax.md#internationalization-i18n) +- Updated README with i18n feature highlights +- Created releases documentation structure +- Enhanced translation README with contribution workflow +- Added Copilot instructions for maintainers + +## 🛠️ Infrastructure + +- Added `.github/copilot-instructions.md` for project maintenance guidelines +- Created `docs/releases/` structure for release documentation +- Improved translation contribution workflow + +## 🙏 Contributing Translations + +We welcome contributions for additional languages or improvements to existing translations! + +Translation files are maintained in `sphinx_exercise/translations/jsons/` as JSON files for easy editing. See the [translation guide](https://github.com/executablebooks/sphinx-exercise/tree/main/sphinx_exercise/translations) for details on how to contribute. + +## 📦 Installation + +Install or upgrade via pip: + +```bash +pip install --upgrade sphinx-exercise +``` + +For development installation: + +```bash +git clone https://github.com/executablebooks/sphinx-exercise +cd sphinx-exercise +pip install -e . +``` + +## 🔗 Links + +- [Full Changelog](https://github.com/executablebooks/sphinx-exercise/blob/main/CHANGELOG.md) +- [Documentation](https://ebp-sphinx-exercise.readthedocs.io/en/latest/) +- [GitHub Repository](https://github.com/executablebooks/sphinx-exercise) +- [Issue Tracker](https://github.com/executablebooks/sphinx-exercise/issues) diff --git a/docs/source/syntax.md b/docs/source/syntax.md index 9ce7d93..f13f2ba 100644 --- a/docs/source/syntax.md +++ b/docs/source/syntax.md @@ -468,3 +468,62 @@ This is an example of how to introduce custom CSS. This is an example of how to introduce custom CSS. ``` + +## Internationalization (i18n) + +`sphinx-exercise` includes built-in support for internationalization across 27 languages. The extension automatically detects your Sphinx project's language setting and displays "Exercise" and "Solution to" labels in the appropriate language. + +### Supported Languages + +The following languages are currently supported: + +- Arabic (ar) +- Bengali (bn) +- Chinese (zh_CN) +- Czech (cs) +- Dutch (nl) +- French (fr) +- German (de) +- Greek (el) +- Hindi (hi) +- Hungarian (hu) +- Indonesian (id) +- Italian (it) +- Japanese (ja) +- Korean (ko) +- Malay (ms) +- Norwegian (no) +- Polish (pl) +- Portuguese (pt) +- Romanian (ro) +- Russian (ru) +- Spanish (es) +- Swedish (sv) +- Tamil (ta) +- Turkish (tr) +- Ukrainian (uk) +- Vietnamese (vi) + +### Configuring Language + +To configure the language for your Sphinx project, set the `language` option in your `conf.py`: + +```python +# conf.py +language = 'es' # For Spanish +``` + +For Jupyter Book projects, set the language in `_config.yml`: + +```yaml +# _config.yml +sphinx: + config: + language: es +``` + +The exercise and solution directives will automatically use the appropriate translations. For example, with Spanish configured, "Exercise" will display as "Ejercicio" and "Solution to" as "Solución a". + +### Contributing Translations + +If you'd like to contribute translations for additional languages or improve existing ones, please see the [translation guide](https://github.com/executablebooks/sphinx-exercise/tree/main/sphinx_exercise/translations) in the repository. diff --git a/sphinx_exercise/nodes.py b/sphinx_exercise/nodes.py index 263428a..711500a 100644 --- a/sphinx_exercise/nodes.py +++ b/sphinx_exercise/nodes.py @@ -14,6 +14,7 @@ from sphinx import addnodes as sphinx_nodes from sphinx.writers.latex import LaTeXTranslator from sphinx.locale import get_translation + from .latex import LaTeXMarkup logger = logging.getLogger(__name__) diff --git a/sphinx_exercise/translations/README.md b/sphinx_exercise/translations/README.md index 8dff863..f65bf40 100644 --- a/sphinx_exercise/translations/README.md +++ b/sphinx_exercise/translations/README.md @@ -1,3 +1,48 @@ -JSONs created using GitHub Copilot Pro. +# Translations for sphinx-exercise -To convert to locale files run `_convert.py` in this folder. +This directory contains internationalization (i18n) files for `sphinx-exercise`. + +## Structure + +- `jsons/` - Source translation files in JSON format + - `Exercise.json` - Translations for "Exercise" label + - `Solution.json` - Translations for "Solution to" label +- `locales/` - Compiled locale files (`.po` and `.mo` files) +- `_convert.py` - Script to generate locale files from JSON sources + +## Supported Languages + +Currently supporting 27 languages: + +Arabic (ar), Bengali (bn), Chinese (zh_CN), Czech (cs), Dutch (nl), French (fr), German (de), Greek (el), Hindi (hi), Hungarian (hu), Indonesian (id), Italian (it), Japanese (ja), Korean (ko), Malay (ms), Norwegian (no), Polish (pl), Portuguese (pt), Romanian (ro), Russian (ru), Spanish (es), Swedish (sv), Tamil (ta), Turkish (tr), Ukrainian (uk), Vietnamese (vi) + +## Adding or Updating Translations + +To add a new language or update existing translations: + +1. Edit the JSON files in `jsons/` directory + - Add translations to both `Exercise.json` and `Solution.json` + - Ensure the language symbol follows ISO 639-1 standard (or locale codes like `zh_CN`) + - Keep entries alphabetically sorted by language name + +2. Run the conversion script to generate `.po` and `.mo` files: + ```bash + python _convert.py + ``` + +3. The script will: + - Remove existing `.po` files + - Generate new `.po` files from JSON sources + - Compile `.mo` files using `msgfmt` + +## Requirements + +The `msgfmt` utility (from gettext) must be installed on your system to compile `.mo` files. + +## Contributing + +Contributions for new languages or improvements to existing translations are welcome! Please ensure: +- Translations are accurate and culturally appropriate +- Both `Exercise.json` and `Solution.json` are updated +- The conversion script runs successfully +- Documentation is updated to list the new language diff --git a/sphinx_exercise/translations/jsons/Exercise.json b/sphinx_exercise/translations/jsons/Exercise.json index 27e8869..ba11f55 100644 --- a/sphinx_exercise/translations/jsons/Exercise.json +++ b/sphinx_exercise/translations/jsons/Exercise.json @@ -1,23 +1,29 @@ [ {"language":"English","symbol":"en","text":"Exercise"}, - {"language":"Spanish","symbol":"es","text":"Ejercicio"}, - {"language":"French","symbol":"fr","text":"Exercice"}, + {"language":"Arabic","symbol":"ar","text":"تمرين"}, {"language":"Bengali","symbol":"bn","text":"অনুশীলনী"}, - {"language":"Russian","symbol":"ru","text":"Упражнение"}, - {"language":"Portuguese","symbol":"pt","text":"Exercício"}, - {"language":"Indonesian","symbol":"id","text":"Latihan"}, - {"language":"German","symbol":"de","text":"Übung"}, - {"language":"Vietnamese","symbol":"vi","text":"Bài tập"}, - {"language":"Tamil","symbol":"ta","text":"பயிற்சி"}, - {"language":"Italian","symbol":"it","text":"Esercizio"}, + {"language":"Chinese","symbol":"zh_CN","text":"练习"}, + {"language":"Czech","symbol":"cs","text":"Cvičení"}, {"language":"Dutch","symbol":"nl","text":"Opgave"}, + {"language":"French","symbol":"fr","text":"Exercice"}, + {"language":"German","symbol":"de","text":"Übung"}, {"language":"Greek","symbol":"el","text":"Άσκηση"}, - {"language":"Polish","symbol":"pl","text":"Ćwiczenie"}, - {"language":"Ukrainian","symbol":"uk","text":"Вправа"}, + {"language":"Hindi","symbol":"hi","text":"अभ्यास"}, + {"language":"Hungarian","symbol":"hu","text":"Gyakorlat"}, + {"language":"Indonesian","symbol":"id","text":"Latihan"}, + {"language":"Italian","symbol":"it","text":"Esercizio"}, + {"language":"Japanese","symbol":"ja","text":"練習"}, + {"language":"Korean","symbol":"ko","text":"연습"}, {"language":"Malay","symbol":"ms","text":"Latihan"}, + {"language":"Norwegian","symbol":"no","text":"Øvelse"}, + {"language":"Polish","symbol":"pl","text":"Ćwiczenie"}, + {"language":"Portuguese","symbol":"pt","text":"Exercício"}, {"language":"Romanian","symbol":"ro","text":"Exercițiu"}, - {"language":"Czech","symbol":"cs","text":"Cvičení"}, - {"language":"Hungarian","symbol":"hu","text":"Gyakorlat"}, + {"language":"Russian","symbol":"ru","text":"Упражнение"}, + {"language":"Spanish","symbol":"es","text":"Ejercicio"}, {"language":"Swedish","symbol":"sv","text":"Övning"}, - {"language":"Norwegian","symbol":"no","text":"Øvelse"} + {"language":"Tamil","symbol":"ta","text":"பயிற்சி"}, + {"language":"Turkish","symbol":"tr","text":"Alıştırma"}, + {"language":"Ukrainian","symbol":"uk","text":"Вправа"}, + {"language":"Vietnamese","symbol":"vi","text":"Bài tập"} ] diff --git a/sphinx_exercise/translations/jsons/Solution.json b/sphinx_exercise/translations/jsons/Solution.json index d55eee4..05f7eaf 100644 --- a/sphinx_exercise/translations/jsons/Solution.json +++ b/sphinx_exercise/translations/jsons/Solution.json @@ -1,23 +1,29 @@ [ {"language":"English","symbol":"en","text":"Solution to"}, - {"language":"Spanish","symbol":"es","text":"Solución a"}, - {"language":"French","symbol":"fr","text":"Solution de"}, + {"language":"Arabic","symbol":"ar","text":"الحل لـ"}, {"language":"Bengali","symbol":"bn","text":"সমাধান"}, - {"language":"Russian","symbol":"ru","text":"Решение к"}, - {"language":"Portuguese","symbol":"pt","text":"Solução para"}, - {"language":"Indonesian","symbol":"id","text":"Solusi untuk"}, - {"language":"German","symbol":"de","text":"Lösung zu"}, - {"language":"Vietnamese","symbol":"vi","text":"Lời giải cho"}, - {"language":"Tamil","symbol":"ta","text":"தீர்வு"}, - {"language":"Italian","symbol":"it","text":"Soluzione a"}, + {"language":"Chinese","symbol":"zh_CN","text":"解答"}, + {"language":"Czech","symbol":"cs","text":"Řešení k"}, {"language":"Dutch","symbol":"nl","text":"Oplossing van"}, + {"language":"French","symbol":"fr","text":"Solution de"}, + {"language":"German","symbol":"de","text":"Lösung zu"}, {"language":"Greek","symbol":"el","text":"Λύση στο"}, - {"language":"Polish","symbol":"pl","text":"Rozwiązanie do"}, - {"language":"Ukrainian","symbol":"uk","text":"Розв'язок до"}, + {"language":"Hindi","symbol":"hi","text":"समाधान"}, + {"language":"Hungarian","symbol":"hu","text":"Megoldás a"}, + {"language":"Indonesian","symbol":"id","text":"Solusi untuk"}, + {"language":"Italian","symbol":"it","text":"Soluzione a"}, + {"language":"Japanese","symbol":"ja","text":"解答"}, + {"language":"Korean","symbol":"ko","text":"해답"}, {"language":"Malay","symbol":"ms","text":"Penyelesaian untuk"}, + {"language":"Norwegian","symbol":"no","text":"Løsning til"}, + {"language":"Polish","symbol":"pl","text":"Rozwiązanie do"}, + {"language":"Portuguese","symbol":"pt","text":"Solução para"}, {"language":"Romanian","symbol":"ro","text":"Soluția pentru"}, - {"language":"Czech","symbol":"cs","text":"Řešení k"}, - {"language":"Hungarian","symbol":"hu","text":"Megoldás a"}, + {"language":"Russian","symbol":"ru","text":"Решение к"}, + {"language":"Spanish","symbol":"es","text":"Solución a"}, {"language":"Swedish","symbol":"sv","text":"Lösning till"}, - {"language":"Norwegian","symbol":"no","text":"Løsning til"} + {"language":"Tamil","symbol":"ta","text":"தீர்வு"}, + {"language":"Turkish","symbol":"tr","text":"Çözüm"}, + {"language":"Ukrainian","symbol":"uk","text":"Розв'язок до"}, + {"language":"Vietnamese","symbol":"vi","text":"Lời giải cho"} ] diff --git a/sphinx_exercise/translations/locales/ar/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/ar/LC_MESSAGES/exercise.mo new file mode 100644 index 0000000..e0f06e0 Binary files /dev/null and b/sphinx_exercise/translations/locales/ar/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/ar/LC_MESSAGES/exercise.po b/sphinx_exercise/translations/locales/ar/LC_MESSAGES/exercise.po new file mode 100644 index 0000000..ff533d9 --- /dev/null +++ b/sphinx_exercise/translations/locales/ar/LC_MESSAGES/exercise.po @@ -0,0 +1,15 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Exercise\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Exercise" +msgstr "تمرين" + +msgid "Solution to" +msgstr "الحل لـ" diff --git a/sphinx_exercise/translations/locales/bn/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/bn/LC_MESSAGES/exercise.mo index b8f8887..85c7472 100644 Binary files a/sphinx_exercise/translations/locales/bn/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/bn/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/cs/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/cs/LC_MESSAGES/exercise.mo index 8754386..b7a2467 100644 Binary files a/sphinx_exercise/translations/locales/cs/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/cs/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/de/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/de/LC_MESSAGES/exercise.mo index 9088c9c..68f29b8 100644 Binary files a/sphinx_exercise/translations/locales/de/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/de/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/el/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/el/LC_MESSAGES/exercise.mo index 741e112..8f8ed00 100644 Binary files a/sphinx_exercise/translations/locales/el/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/el/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/es/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/es/LC_MESSAGES/exercise.mo index 76c2d87..cdb8271 100644 Binary files a/sphinx_exercise/translations/locales/es/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/es/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/fr/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/fr/LC_MESSAGES/exercise.mo index b15e61b..1d07b26 100644 Binary files a/sphinx_exercise/translations/locales/fr/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/fr/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/hi/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/hi/LC_MESSAGES/exercise.mo new file mode 100644 index 0000000..7d39a26 Binary files /dev/null and b/sphinx_exercise/translations/locales/hi/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/hi/LC_MESSAGES/exercise.po b/sphinx_exercise/translations/locales/hi/LC_MESSAGES/exercise.po new file mode 100644 index 0000000..aec045a --- /dev/null +++ b/sphinx_exercise/translations/locales/hi/LC_MESSAGES/exercise.po @@ -0,0 +1,15 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Exercise\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Exercise" +msgstr "अभ्यास" + +msgid "Solution to" +msgstr "समाधान" diff --git a/sphinx_exercise/translations/locales/hu/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/hu/LC_MESSAGES/exercise.mo index bdefdd2..c56e0b8 100644 Binary files a/sphinx_exercise/translations/locales/hu/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/hu/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/id/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/id/LC_MESSAGES/exercise.mo index 3bac777..fbd066a 100644 Binary files a/sphinx_exercise/translations/locales/id/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/id/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/it/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/it/LC_MESSAGES/exercise.mo index cb63a79..0704ae1 100644 Binary files a/sphinx_exercise/translations/locales/it/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/it/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/ja/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/ja/LC_MESSAGES/exercise.mo new file mode 100644 index 0000000..96195e2 Binary files /dev/null and b/sphinx_exercise/translations/locales/ja/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/ja/LC_MESSAGES/exercise.po b/sphinx_exercise/translations/locales/ja/LC_MESSAGES/exercise.po new file mode 100644 index 0000000..dedc979 --- /dev/null +++ b/sphinx_exercise/translations/locales/ja/LC_MESSAGES/exercise.po @@ -0,0 +1,15 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Exercise\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Exercise" +msgstr "練習" + +msgid "Solution to" +msgstr "解答" diff --git a/sphinx_exercise/translations/locales/ko/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/ko/LC_MESSAGES/exercise.mo new file mode 100644 index 0000000..2f7877a Binary files /dev/null and b/sphinx_exercise/translations/locales/ko/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/ko/LC_MESSAGES/exercise.po b/sphinx_exercise/translations/locales/ko/LC_MESSAGES/exercise.po new file mode 100644 index 0000000..d642ee7 --- /dev/null +++ b/sphinx_exercise/translations/locales/ko/LC_MESSAGES/exercise.po @@ -0,0 +1,15 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Exercise\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Exercise" +msgstr "연습" + +msgid "Solution to" +msgstr "해답" diff --git a/sphinx_exercise/translations/locales/ms/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/ms/LC_MESSAGES/exercise.mo index 9a34bf6..0a4b5cc 100644 Binary files a/sphinx_exercise/translations/locales/ms/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/ms/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/nl/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/nl/LC_MESSAGES/exercise.mo index d70196d..62829c7 100644 Binary files a/sphinx_exercise/translations/locales/nl/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/nl/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/no/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/no/LC_MESSAGES/exercise.mo index 79b34f0..8c486ae 100644 Binary files a/sphinx_exercise/translations/locales/no/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/no/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/pl/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/pl/LC_MESSAGES/exercise.mo index 7bc4465..2263e21 100644 Binary files a/sphinx_exercise/translations/locales/pl/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/pl/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/pt/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/pt/LC_MESSAGES/exercise.mo index 13bce10..f4c1e6e 100644 Binary files a/sphinx_exercise/translations/locales/pt/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/pt/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/ro/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/ro/LC_MESSAGES/exercise.mo index fb2f17d..aaba841 100644 Binary files a/sphinx_exercise/translations/locales/ro/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/ro/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/ru/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/ru/LC_MESSAGES/exercise.mo index 1dcb5f5..7e98d30 100644 Binary files a/sphinx_exercise/translations/locales/ru/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/ru/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/sv/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/sv/LC_MESSAGES/exercise.mo index 2000d94..f1b21db 100644 Binary files a/sphinx_exercise/translations/locales/sv/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/sv/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/ta/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/ta/LC_MESSAGES/exercise.mo index 3c40aeb..c612857 100644 Binary files a/sphinx_exercise/translations/locales/ta/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/ta/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/tr/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/tr/LC_MESSAGES/exercise.mo new file mode 100644 index 0000000..1cadb09 Binary files /dev/null and b/sphinx_exercise/translations/locales/tr/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/tr/LC_MESSAGES/exercise.po b/sphinx_exercise/translations/locales/tr/LC_MESSAGES/exercise.po new file mode 100644 index 0000000..9a3b698 --- /dev/null +++ b/sphinx_exercise/translations/locales/tr/LC_MESSAGES/exercise.po @@ -0,0 +1,15 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Exercise\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Exercise" +msgstr "Alıştırma" + +msgid "Solution to" +msgstr "Çözüm" diff --git a/sphinx_exercise/translations/locales/uk/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/uk/LC_MESSAGES/exercise.mo index a766c2e..7f921d6 100644 Binary files a/sphinx_exercise/translations/locales/uk/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/uk/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/vi/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/vi/LC_MESSAGES/exercise.mo index e127085..21dd0ab 100644 Binary files a/sphinx_exercise/translations/locales/vi/LC_MESSAGES/exercise.mo and b/sphinx_exercise/translations/locales/vi/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/zh_CN/LC_MESSAGES/exercise.mo b/sphinx_exercise/translations/locales/zh_CN/LC_MESSAGES/exercise.mo new file mode 100644 index 0000000..d28b54b Binary files /dev/null and b/sphinx_exercise/translations/locales/zh_CN/LC_MESSAGES/exercise.mo differ diff --git a/sphinx_exercise/translations/locales/zh_CN/LC_MESSAGES/exercise.po b/sphinx_exercise/translations/locales/zh_CN/LC_MESSAGES/exercise.po new file mode 100644 index 0000000..cf0f8be --- /dev/null +++ b/sphinx_exercise/translations/locales/zh_CN/LC_MESSAGES/exercise.po @@ -0,0 +1,15 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Exercise\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Exercise" +msgstr "练习" + +msgid "Solution to" +msgstr "解答"