Contribute to the DSpace Development Fund
The newly established DSpace Development Fund supports the development of new features prioritized by DSpace Governance. For a list of planned features see the fund wiki page.
WARNING - Still under review
The proposed approach is still under review - there are still considerable technical hurdles to overcome in this area of work.
Introduction
Prior to DSpace 7, the DSpace XML and JSP User interfaces had different catalogs of interface messages. Unified on a single user interface, the DSpace community is transitioning to a single catalog of interfaces messages and better tools for translators.
The DSpace community is actively seeking contributors to aid in the translation of DSpace interface messages, to ensure that DSpace 7 can benefit from the most extensive localization support in the history of the project.
Getting started
Contributing to translations requires a Github and a DuraSpace wiki account. Head over to www.github.com to create a free Github account.
Accounts for the DuraSpace wiki are free as well and can be requested in an email to sysadmin@duraspace.org, indicating that you wish to contribute to DSpace 7 Translations.
Make yourself familiar with the new json5 catalog of DSpace messages
- https://github.com/DSpace/dspace-angular/blob/master/resources/i18n/en.json5
- This English master file is the authoritative source for the list of keys that are used in the angular interface, as well as the associated English messages
- Example link Dutch catalog
- As one example of the translated catalog, you will see in the dutch catalog that the English original messages are still present as comments.
2019-10-29 State of development
...
Volunteer!
Please list your name, email address alongside any of the languages to which you wish to contribute. Also feel free to join the channel #translation on the DuraSpace Slack for assistance and discussion around DSpace 7 translations.
Dutch (nl.json5)
Bram Luyten - bram@atmire.com
German (de.json5)
Claudia Jürgen - claudia.juergen@tu-dortmund.de
Translator documentation
The authoritative English master file (en.json5)
The catalogs can be found in resources/i18n
"submission.workflow.tasks.claimed.reject.reason.submit": "Reject item", "submission.workflow.tasks.claimed.reject.reason.title": "Reason", "submission.workflow.tasks.claimed.reject.submit": "Reject", "submission.workflow.tasks.claimed.reject_help": "If you have reviewed the item and found it is <strong>not</strong> suitable for inclusion in the collection, select \"Reject\". You will then be asked to enter a message indicating why the item is unsuitable, and whether the submitter should change something and resubmit.",
Translations (for example, nl.json5)
In order to allow automated syncing with changes in the English master catalog, and to make it clear to all translators what the original source of the message was, the English original is copied as a comment into the translated files
// "404.link.home-page": "Take me to the home page", "404.link.home-page": "Terug naar de homepagina", // "404.page-not-found": "page not found", "404.page-not-found": "Pagina niet gevonden", // "admin.registries.bitstream-formats.create.failure.content": "An error occurred while creating the new bitstream format.", // TODO New key - Add a translation "admin.registries.bitstream-formats.create.failure.content": "An error occurred while creating the new bitstream format.",
When new keys are introduced, TODO messages are automatically added to the catalogs of other languages.
Background reading
Developer i18n How-to
When you create new keys, update existing keys or the meaning of existing messages, keep the following in mind.
Escaping
In the message catalogs, double quotes have to be escaped with \
"submission.workflow.tasks.claimed.approve_help": "If you have reviewed the item and it is suitable for inclusion in the collection, select \"Approve\"."
Syncing existing translations with changes to en.json5
Whenever you make one of following changes to en.json5:
- Introduce new keys & messages
- Change an existing key
- Change an existing message
Please run /scripts/sync-i18n-files.js
The results of your changes will be reflected in the catalogs of the other languages, so translators can pick up the work to:
- Provide translations for the new keys you just introduced
- Update existing translations in case you changed the message for an existing key
Future work
ICU Expressions and Pluralization
Instead of relying on different messages for singular and plural forms, the community hopes to conform the messages to the ICU Message Format as specified in the CLDR Plural rules
What happened to the objective to leverage .po and gettext as new standard?
Originating in the Linux world, the GNU gettext tools and the PO file format is also the backbone of localization support in Wordpress, django and Drupal
The Angular i18n framework we use, NGX translate, has a 3rd party PO file loader: https://github.com/biesbjerg/ngx-translate-po-http-loader
Even though the community was initially very optimistic about its potential and the transition to .po and gettext, the major deal breaker was the absence of support for gettext message context (msgctxt), that would allow a translator to translate a key like "Home" into different words in the target language, depending on the context.
The initial ambitions to use the English string as the key itself, and abandon intermediate keys, was also problematic, as we hit a big number of areas in the code where keys were built up programmatically.
As a result, the community settled for:
- JSON5 as the format for the message catalog
- Reverting to a flat list of keys, instead of a hierarchical tree. This now makes it possible again to search on a particular key, which was not possible anymore in the hierarchical format.
2019-07-25 State of development (OLD)
The key challenges that are still being tackled are:
- Compatibility between the PO loader for NGX and Angular 7 cfr https://github.com/biesbjerg/ngx-translate-po-http-loader/issues/29
- Support for pluralization
- Support for the translation of a specific English message, into different messages in another language, depending on the context.
2019-05-20 State of development (OLD)
As part of preview release 1, the developers are still using en.json catalogs. Once Pull Request 366 is accepted, the migration to the new .POT and .PO standard files will be official.
As long as DSpace 7 is still in development, it is expected that the dspace.pot catalog, as well as the different translations, will continue to be extended and evolved.
Together, we aim to release as many, as complete translations as possible, as part of the official DSpace 7.0 release.
Grep commands for identifying keys, if we ever want to replace them with the English string again
Because we are currently keeping message keys, there is no immediate use for identification of keys to replace with the English strings. But for future use, this might still come in handy:
If you execute following command in the angular source directory, you get a list of keys that have not yet been replaced.
grep -snRHIiE "'.*\.[^\s]+\.[^']+' \| translate" *
Sample output looks like:
app/+community-page/delete-community-page/delete-community-page.component.html:5: <h2 id="header" class="border-bottom pb-2">{{ 'community.delete.head' | translate app/+community-page/delete-community-page/delete-community-page.component.html:7: <p class="pb-2">{{ 'community.delete.text' | translate:{ dso: dso.name } }}</p> app/+community-page/delete-community-page/delete-community-page.component.html:12: <button class="btn btn-primary" (click)="onCancel(dso)">{{'community.delete.cancel' | translate}} app/+community-page/edit-community-page/edit-community-page.component.html:4: <h2 id="header" class="border-bottom pb-2">{{ 'community.edit.head' | translate }}</h2>