Thinking about the release / translation workflow
| Project: | Localization server |
| Version: | 6.x-1.x-dev |
| Component: | Miscellaneous |
| Category: | task |
| Priority: | normal |
| Assigned: | Unassigned |
| Status: | active |
Jump to:
As I'm maintaining on of the l.d.o translation groups I start seeing the pending approval list growing too much. Yes, I know we need more 'maintainers work' but also there are some issues about how we are currently handling releases and strings that makes old strings stay there forever, cluttering the approval list. This is related to the packaging process too.
So I just want to make some reflection and see what makes sense to implement. Let's consider some cases:
- A new minor version Drupal core / module release is out (Drupal 6.10 -> 6.11, Module 6.x-1.0 -> 6.x-1.1). In this case it may make sense to keep the old strings available for download for people who for whatever reason don't feel the press to upgrade right away. But on the other side we may prefer translators to stay focused on the latest release only.
- A new module point release is out (Module 6.x-1.0-beta1 to 6.x-1.0-beta2). For this case we don't really want to keep old strings or translations. We better just provide a 6.x-1.0 download and keep it in sync with the last module version. We should drop old strings from everywhere
- A new full version version (new branch) of the module is out (Module 6.x-1.0 to 6.x-2.0). Then we should make a difference on whether the old version is still supported or not. If supported we should still keep old strings available for translation, not otherwise. Though in both cases we still want to have them available for downloading.
In any case we should always consider there may be people using old versions of core or modules, either because they have them already download or running, or because they simply don't need to upgrade yet. They may be also doing a fresh install with old versions of modules.
My conclusions from all this:
- For packaging, we just need to keep a file for each minor version of core / modules. Like 6.x-1.0.es.po. But we don't need in any case to keep files for point releases like 6.x-1.0-beta1.es.po. We can also drop the old release and the strings right away when moving from beta1 to beta2
- We need to keep all strings for all minor versions if only for tracking/credits purposes. But old ones we don't want them to clutter the translation ui or the approval queue. So we need something like 'disabled' strings.
How this translates to the module code and data model:
- We need a 'status' field on the releases table to know for which releases we are still doing repackaging and accepting strings
- We need a 'status' field on the strings table to keep track of all translated strings, though some of them may not be 'translatable' anymore
- We need to keep release status in sync with drupal.org project releases. And we need to keep strings in sync with releases. A string needs to be 'deleted' when it is in beta1 but not in beta2. And needs to be 'disabled' when it is in 6.x-1.1 but not in 6.x-1.2 (Unless it is in some other module's supported version)

#1
I think what we discussed in Paris was similar but not entirely as you write it up here. We discussed generating .po files for only latest point releases on supported branches of modules, so we'd not delete the older point release .po files, but keep the untouched instead.
We did not discuss how this would affect translatable strings and I totally agree that we should remove strings from sight which are not in actual point releases anymore.
Totally deleting strings like you suggest with strings in beta 1 but not in beta 2 is not feasible until we can ensure that the source packages are parsed properly in all cases. Which recent events showed might not be the case unfortunately. See #589774: missing module release data and #593310: custom_breadcrumbs 6.x-1.5 parsing error. If we just delete strings in these cases, we drop possibly useful translations.
#2
Yes, you're right this was not exactly the same. These are just some ideas for improvement after putting some more thinking into that.
About point releases, there are some reasons why we don't need, nor event want to do packages for point releases:
- They are very temporary by nature (beta1, beta2...) and people using them should be basically interested in getting the latest one for translations, I don't think we even want them listed in the releases list.
- When moving from one to the next (i.e. beta1 to beta2) or right after releasing the stable version (6.x-1.0-rc1 to 6.x-1.0) if we keep the same name '6.x-1.0' for all, the download will be available inmediately. This won't happen if we stick the 'beta' or 'rc' tags to the file name. And likely people download the module inmediately after release just won't find any translation.
I think the easy way to do this is to add in adition to the 'title' (full release tag) a 'major' and 'minor' and if a new point release has the same two, we just update the old one, instead of creating a new one.
About deleting strings we just need some cron removing 'orphaned' strings, so I don't think it's a big deal.
#3
subscribe
I think that one po file for all of realeses of one item(module f.e.) with only translated strings would be good enough for support a good translation
In Ukrainian translations I managed to see ~10 percent of strings that are "garbage" from previous releases and this is not a problem for any (I kept em in CVS for support)
#4
@podarok,
The problem with that garbage is that it piles up, and anyway 10% is bad enough, as it means you may be wasting 10% of your team's time on outdated strings.
#5
But when someone trying to update translation(previous module version f.e.) - got untranslated strings even 100% translated module, so better to keep that 10% than user starts translation via l10n_client again