What internationalization and translation subjects?

translators are nothing without appropriate tools, making translation possible and spreading it.
We currently have a few well covered subjects: administration, moulinette and connection form.

Though, as always, there is a lot to do everywhere and ideas to realize! This thread is to discuss it together, so developers can know about needs, and potentially chose an idea to implement. Whatever they implement it or not, they may have those needs in mind, so they don’t make incompatible choices.

What subjects would I like to be addressed?

  1. enable translation of strings used in application installation forms (in Weblate),
  2. enable translation of strings used to describe the application in “software center” (in Weblate),
  3. display a translation status/percentage of upstream applications (both for official and community apps),
  4. enable documentation translation and provide it as an application installed by default,
  5. enable website translation.

How does this contribute to YunoHost values and foundations?

a FLOSS software; fully community driven

  • the translation of installation strings and application descriptions help to bring closer to the user experience among “officially YunoHost” and “community YunoHost” (you do not need to have the visibility of official supported application to benefit translation community, nor to use official YunoHost to have a localized user experience).
  • it helps the application packagers to capitalize on the dawning YunoHost translator community, and help them to share their application to the widest range of users. It means directly benefiting community work, instead of just sharing their application package.
  • it enables user to have a better overview of free self-hosting software richness. Actual situation may suggest that many applications are not available in their language.
  • an easily translatable website may increase the promotion of our work, without needing the infrastructure or developer group to push every new contribution.

based on existing free software application (roundcube, baikal, etc.) ; that everyone can own

  • upstream application translation status would inform the user about language support and may invite him to contribute upstream,
  • a translated documentation and delivered with YunoHost would develop user autonomy and promotion (the best promotion platform is to show your own setup)

I have many other ideas, but those looked like the most important ones. I thought about Timezone support and language characteristics (date format, language, numbers, currencies) in application installation but it sounds like fine tuning yet.

Do you see anything else in your wish-list? What’s the first priority to you?

Remember: YunoHost is far from having a big translator community, it’s just starting, you can contribute in https://translate.yunohost.org (remember to subscribe for new strings notifications)

We discussed yesterday about the simplest way to implement translation for yunohost apps (in manifeste). We will create some ticket on redmine to plan development of this.

What do you preffer for the weblate integration ? One project with all yunohost apps translation or one project per apps (there is about 15 keys to translate by apps). If we do a project for each apps we will be able to display translation status per apps but it could be difficult to browse between all this projects, what is your point of view ?

thanks for your answer, I thought about it and I think we should keep it altogether in one file. I hope it will lower the limit between community and official.

Two questions to be answered first:

  • Can you please list these 15 keys to be translated? Are we sure the content is per package and not per key? (for example: the status list is common to all packages)
  • Can you embed context ? We should know which package provides the string to understand the context. I’m not sure YAML file can handle this, I assume you’ll have to produce a gettext file or XLIFF…

Thanks for your help,

I’ve just coded a prototype that extract that from the manifest of the apps (from the built list). You can see the result here: https://github.com/YunoHost/apps/pull/123

Of the en.json (I’ve extracted all the already translated strings):

    "agendav_manifest_arguments_en_language": "Default language to be used in AgenDAV", 
    "agendav_manifest_arguments_en_path": "Choose a path for AgenDAV", 
    "agendav_manifest_arguments_install_domain": "Choose a domain for AgenDAV", 
    "agendav_manifest_description": "CalDAV web client", 
    "baikal_manifest_arguments_es_password": "Set the password for the administration", 
    "baikal_manifest_arguments_es_path": "Choose a path for Ba\u00efkal", 
    "baikal_manifest_arguments_install_domain": "Choose a domain for Ba\u00efkal", 
    "baikal_manifest_description": "Lightweight CalDAV+CardDAV server", 
    "dokuwiki_manifest_arguments_es_admin": "Choose an admin user", 
    "dokuwiki_manifest_arguments_es_is_public": "Is it a public DokuWiki site ?", 
    "dokuwiki_manifest_arguments_es_path": "Choose a path for DokuWiki", 
    "dokuwiki_manifest_arguments_install_domain": "Choose a domain for DokuWiki", 
    "dokuwiki_manifest_description": "DokuWiki is a simple to use and highly versatile Open Source wiki software that doesn't require a database.", 
    "hextris_manifest_arguments_es_is_public": "Is it a public site ?", 
    "hextris_manifest_arguments_es_path": "Choose a path for Hextris", 
    "hextris_manifest_arguments_install_domain": "Choose a domain for Hextris", 
    "hextris_manifest_description": "A fast paced puzzle game.", 
    "jappix_manifest_arguments_es_language": "Choose the default language of Jappix", 
    "jappix_manifest_arguments_es_name": "Choose a name for Jappix", 
    "jappix_manifest_arguments_es_path": "Choose a path for Jappix", 
    "jappix_manifest_arguments_install_domain": "Choose a domain for Jappix", 
    "jappix_manifest_description": "A free social network", 
    "jirafeau_manifest_arguments_es_admin_user": "Choose an admin user (will be able to access admin.php page)", 
    "jirafeau_manifest_arguments_es_is_public": "Is it a public Jirafeau site?", 
    "jirafeau_manifest_arguments_es_path": "Choose a path for Jirafeau", 
    "jirafeau_manifest_arguments_es_upload_password": "Set the password granting upload permissions (leave empty to allow anybody to upload)", 
    "jirafeau_manifest_arguments_install_domain": "Choose a domain for Jirafeau", 
    "jirafeau_manifest_description": "Upload a file in a simple way and give a unique link to it", 
    "kanboard_manifest_arguments_es_admin": "Choose the admin user for Kanboard", 
    "kanboard_manifest_arguments_es_is_public": "Is it a public site ?", 
    "kanboard_manifest_arguments_es_path": "Choose a path for Kanboard", 
    "kanboard_manifest_arguments_install_domain": "Choose a domain for Kanboard", 
    "kanboard_manifest_description": "Kanboard is a simple visual task board web application", 
    "my_webapp_manifest_arguments_es_is_public": "Is it a public website?", 
    "my_webapp_manifest_arguments_es_password": "Set the password for the SFTP access", 
    "my_webapp_manifest_arguments_es_path": "Choose a path for your Webapp", 
    "my_webapp_manifest_arguments_es_with_mysql": "Do you need a MySQL database?", 
    "my_webapp_manifest_arguments_install_domain": "Choose a domain for your Webapp", 
    "my_webapp_manifest_description": "Custom Web app with SFTP access", 
    "opensondage_manifest_arguments_es_admin": "Choose the OpenSondage administrator (must be an existing YunoHost user)", 
    "opensondage_manifest_arguments_es_is_public": "Could non member create poll ?", 
    "opensondage_manifest_arguments_es_language": "Choose the default language of this OpenSondage", 
    "opensondage_manifest_arguments_es_path": "Choose a path for OpenSondage", 
    "opensondage_manifest_arguments_install_domain": "Choose a domain for OpenSondage", 
    "opensondage_manifest_description": "OpenSondage is an online service for planning an appointment or making a decision quickly and easily. No registration is required.", 
    "owncloud_manifest_arguments_es_admin": "Choose the ownCloud administrator (must be an existing YunoHost user)", 
    "owncloud_manifest_arguments_es_path": "Choose a path for ownCloud", 
    "owncloud_manifest_arguments_es_user_home": "Access the users home folder from ownCloud?", 
    "owncloud_manifest_arguments_install_domain": "Choose a domain for ownCloud", 
    "owncloud_manifest_description": "Sync & share your files, pictures, music, contacts, calendars, and much more!", 
    "phpmyadmin_manifest_arguments_es_admin": "Choose the only allowed admin user", 
    "phpmyadmin_manifest_arguments_es_path": "Choose a path for phpMyAdmin", 
    "phpmyadmin_manifest_arguments_install_domain": "Choose a domain for phpMyAdmin", 
    "phpmyadmin_manifest_description": "Manage MySQL databases over the web", 
    "roundcube_manifest_arguments_en_path": "Choose a path for Roundcube", 
    "roundcube_manifest_arguments_en_with_carddav": "Install CardDAV synchronization plugin?", 
    "roundcube_manifest_arguments_install_domain": "Choose a domain for Roundcube", 
    "roundcube_manifest_description": "Open Source Webmail software", 
    "searx_manifest_arguments_en_is_public": "Is it a public Searx site ?", 
    "searx_manifest_arguments_en_path": "Choose a path for Searx", 
    "searx_manifest_arguments_install_domain": "Choose a domain for Searx", 
    "searx_manifest_description": "A privacy-respecting, hackable metasearch engine", 
    "shellinabox_manifest_arguments_es_path": "Choose a path for Shell In A Box", 
    "shellinabox_manifest_arguments_install_domain": "Choose a domain for Shell In A Box", 
    "shellinabox_manifest_description": "Web based AJAX terminal emulator", 
    "strut_manifest_arguments_es_path": "Choose a path for Strut", 
    "strut_manifest_arguments_es_public_site": "Could non member create presentations ?", 
    "strut_manifest_arguments_install_domain": "Choose a domain for Strut", 
    "strut_manifest_description": "Strut is a slide editor creating impress.js presentations.", 
    "transmission_manifest_arguments_es_path": "Choose a path for Transmission", 
    "transmission_manifest_arguments_install_domain": "Choose a domain for Transmission", 
    "transmission_manifest_description": "A Fast, Easy, and Free BitTorrent Client", 
    "ttrss_manifest_arguments_es_path": "Choose a path for Tiny-Tiny-RSS", 
    "ttrss_manifest_arguments_install_domain": "Choose a domain for Tiny-Tiny-RSS", 
    "ttrss_manifest_description": "A PHP and Ajax feed reader", 
    "wallabag_manifest_arguments_es_path": "Choose a path for Wallabag", 
    "wallabag_manifest_arguments_install_domain": "Choose a domain for Wallabag", 
    "wallabag_manifest_description": "A self hostable read-it-later app", 
    "wordpress_manifest_arguments_es_admin": "Choose the WordPress administrator (must be an existing YunoHost user)", 
    "wordpress_manifest_arguments_es_is_public": "Is it a public WordPress site ?", 
    "wordpress_manifest_arguments_es_language": "Choose the language of the WordPress site", 
    "wordpress_manifest_arguments_es_multisite": "Enable multisite option ?", 
    "wordpress_manifest_arguments_es_path": "Choose a path for WordPress", 
    "wordpress_manifest_arguments_install_domain": "Choose a domain for WordPress", 
    "wordpress_manifest_description": "Create a beautiful blog or website easily", 
    "zerobin_manifest_arguments_es_is_public": "Is it a public Zerobin site ?", 
    "zerobin_manifest_arguments_es_path": "Choose a path for Zerobin", 
    "zerobin_manifest_arguments_install_domain": "Choose a domain for Zerobin", 
    "zerobin_manifest_description": "A minimalist, opensource online pastebin where the server has zero knowledge of pasted data"
1 Like

This also brings the question of “where shoudl we store strings to translate that are external to the code which we will potentially reuse at several places?”. This will also be the case for the app levels.

1 Like