From fcf924c7939c92345d4eac1baab50420c18067bb Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 22 Nov 2022 22:48:16 +1100 Subject: [PATCH 1/4] Adds blog post about translation --- _posts/2021-11-22-translation.md | 58 +++++++++++++++++++++++++ assets/blog/2022-11-22-translation.png | Bin 0 -> 53533 bytes 2 files changed, 58 insertions(+) create mode 100644 _posts/2021-11-22-translation.md create mode 100644 assets/blog/2022-11-22-translation.png diff --git a/_posts/2021-11-22-translation.md b/_posts/2021-11-22-translation.md new file mode 100644 index 00000000..0eb0809b --- /dev/null +++ b/_posts/2021-11-22-translation.md @@ -0,0 +1,58 @@ +--- +author: oliver +title: Translating InvenTree +--- + +How we provide translation support for InvenTree in multiple languages + +### Community Contributed Translations + +At the time of writing, InvenTree provides language translations for 25 languages (in addition to English), with over 11,000 translated words! This is thanks to the sustained efforts of 130+ InvenTree users. + +Translation progress can be viewed on our [Crowdin project page](https://crowdin.com/project/inventree). Here you can view the progess of the translation efforts: + +![Translations](/assets/blog/2022-11-22-translation.png) + +### Translation Pipeline + +As translations are entirely community contributed, we need a software framework that allows non-technical users to submit and proofread translations, and a way to bring those translations back into the InvenTree software. + +#### Backend - Django + +At its core, InvenTree is built on the [Django](https://www.djangoproject.com/) framework, which provides a [translation framweork](https://docs.djangoproject.com/en/4.1/topics/i18n/translation/) "out of the box". + +The Django translation framework provides a toolkit for marking certain text strings as "translatable". Translation strings are able to be replaced by a translated string from a language specified by the user - *if a translation for the text is available in that language*. + +There are many files within the InvenTree project which can provide these translation strings: + +- Python source files +- Javascript source files +- HTML template files + +Additionally, translation support is provided for the [InvenTree Mobile App](/extend/app.md)! + +#### Exporting Translations - GitHub + +On every commit to the InvenTree main branch, the source code is analyzed to discover and extract translation strings. This information is then pushed to a separate code branch, which is monitored by the [translation service](#community-translation---crowdin) + +#### Community Translation - Crowdin + +The crucial piece of the puzzle is the integration with [Crowdin](https://crowdin.com/) - an online translation service which provides community contributed translation, and supports open source projects. + +Crowdin monitors the [InvenTree GitHub repository](https://github.com/inventree/inventree) for any changes to translation files, and provides a user interface for translators to suggest appropriate translated strings. + +Suggested translations are then approved (again, by the InvenTree user community), and periodically pushed back to the InvenTree GitHub repo. + +#### Merging Translations - GitHub + +Updated translated strings are periodically merged back into the main code branch, keeping the InvenTree code base up to date. + +### Contributing + +The translation framework is provided by the InvenTree team to make our software more useful and appealing to a greater number of people. The entire translation effort is driven by the InvenTree community. Any contributions, no matter how large or small, are greatly encouraged! + +If you would like to see improved translations in a particular language, read the [contribution guide](/contribute.md#translate)! The InvenTree project benefits greatly from your efforts, and you get a great piece of open source software in your native language. + +#### Adding New Languages + +If you would like to see support for a new language, [raise an issue on our GitHub page](https://github.com/inventree/InvenTree/issues/new?assignees=&labels=enhancement%2Ctriage%3Anot-checked&template=feature_request.yaml&title=%5BFR%5D+title). \ No newline at end of file diff --git a/assets/blog/2022-11-22-translation.png b/assets/blog/2022-11-22-translation.png new file mode 100644 index 0000000000000000000000000000000000000000..988e51c56742e317eb71b3c852a65827a46fc3c2 GIT binary patch literal 53533 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 ZEmNH>0U!OC6s*}HX9qX?vV;ED{sp@c!gK%t literal 0 HcmV?d00001 From 003acada5c50623536633c087f8d8db18e6bc55a Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 22 Nov 2022 22:49:56 +1100 Subject: [PATCH 2/4] Tweak text --- _posts/2021-11-22-translation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_posts/2021-11-22-translation.md b/_posts/2021-11-22-translation.md index 0eb0809b..254efc11 100644 --- a/_posts/2021-11-22-translation.md +++ b/_posts/2021-11-22-translation.md @@ -7,9 +7,9 @@ How we provide translation support for InvenTree in multiple languages ### Community Contributed Translations -At the time of writing, InvenTree provides language translations for 25 languages (in addition to English), with over 11,000 translated words! This is thanks to the sustained efforts of 130+ InvenTree users. +At the time of writing, InvenTree provides language translations for 25 languages (in addition to English), with over 11,000 translated words! This is thanks to the sustained efforts of 130+ InvenTree users, who have contributed their time to make our software better for everyone. -Translation progress can be viewed on our [Crowdin project page](https://crowdin.com/project/inventree). Here you can view the progess of the translation efforts: +Translation progress can be viewed on our [Crowdin project page](https://crowdin.com/project/inventree). Here you can view the current status of the translation efforts: ![Translations](/assets/blog/2022-11-22-translation.png) From 0990892553fd186e321713f6582f05eccb4aa734 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 24 Nov 2022 23:33:52 +0100 Subject: [PATCH 3/4] Readd do link (#73) * remove DO section See https://github.com/inventree/InvenTree/pull/3957 * Revert "remove DO section" This reverts commit c2b8e9166ab0b4c8f56fe9e4c91271a5a6e11091. * add DO section again --- deploy.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/deploy.md b/deploy.md index 31c5b877..2c0dd7ae 100644 --- a/deploy.md +++ b/deploy.md @@ -17,6 +17,10 @@ Refer to the [docker installation guide](https://docs.inventree.org/en/latest/st A [bare metal installation guide](https://docs.inventree.org/en/latest/start/intro/) is provided for users who are looking for a low-level or custom installation. +### Cloud + +A member of the team provides a [1-click app for InvenTree](https://marketplace.digitalocean.com/apps/inventree?refcode=d6172576d014&action=deploy) on the DigitalOcean marketplace. + ### Other Options The core InvenTree server is built using the widely used python-based framework [Django](https://djangoproject.com/). Therefore there are deployment methods for nearly all plattforms and architectures. If you want to read more about InvenTree's structure and a typical installation read the [architecture overview](../contribute/code/architecture). From 82edc04b20db5cced93fa6a10c55fef49ab7a1ff Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 26 Nov 2022 11:04:27 +1100 Subject: [PATCH 4/4] Fix link to plugin page (#80) --- extend/plugin/index.md | 4 +++- support.md | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/extend/plugin/index.md b/extend/plugin/index.md index 7e3e29a8..431496c7 100644 --- a/extend/plugin/index.md +++ b/extend/plugin/index.md @@ -2,7 +2,9 @@ title: Plugins --- We supply core-dev and community built plugins to get you started with extending InvenTree's functionality. Plugins can hook into many parts of the UI, buisness logic and webserver. -We expose some internal python APIs to speed up your development and keep the instance running while you discover the possibilities. [Learn more](https://docs.inventree.org/en/latest/extend/plugins/) +We expose some internal python APIs to speed up your development and keep the instance running while you discover the possibilities. + +You can read more about the plugin architecture, including information on developing new plugins, on our [documentation](https://docs.inventree.org/en/latest/extend/plugins/) ### Highlights diff --git a/support.md b/support.md index 6184a658..9dbf7147 100644 --- a/support.md +++ b/support.md @@ -11,7 +11,8 @@ Private questions (via DM, email, etc.) are generally not answered, use the publ ## Custom Features If you require a custom feature you can either: - Suggest the feature on the issue tracker as a [Feature Request](https://github.com/inventree/InvenTree/issues/new?template=feature_request.yaml) -- Create a [plugin](extend/plugin/index.md) +- Implement the feature yourself, and contribute back to the project. InvenTree developers will happily help you work through any issues. +- Create a [plugin](/extend/plugin/index.md) - Request a paid customisation ## Paid Customisation / Support