Problem/Motivation

Currently how we check for updated translations and then actually update the translations is baked into controllers and forms in the Interface translation module. This makes it hard to provide the functionality through non-HTML means, for example Drush. See https://github.com/drush-ops/drush/pull/1818

Proposed resolution

Provide a service for high-level translation update functions.

Remaining tasks

  • Agree on the scope.
  • Write tests.
  • Write and check code.
  • Write change record.

User interface changes

None.

API changes

A new service that wraps existing procedural code.

Data model changes

None.

CommentFileSizeAuthor
#64 Screen Shot 2020-08-07 at 4.18.03 PM.png69.28 KBKristen Pol
#64 Screen Shot 2020-08-07 at 4.17.57 PM.png88.65 KBKristen Pol
#62 interdiff_60-62.txt8.35 KBvsujeetkumar
#62 2631584_62.patch32.01 KBvsujeetkumar
#60 interdiff_58-60.txt2.84 KBvsujeetkumar
#60 2631584_60.patch23.4 KBvsujeetkumar
#58 interdiff_56-58.txt3.81 KBvsujeetkumar
#58 2631584_58.patch23.39 KBvsujeetkumar
#56 2631584_56.patch23.22 KBvsujeetkumar
#48 interdiff-2631584-47-48.txt438 byteslangelhc
#48 drupal-provide_a_proper_api-2631584-48.patch31.83 KBlangelhc
#47 drupal-provide_a_proper_api-2631584-47.patch31.84 KBSutharsan
#47 interdiff-2631584-42-47.txt2.43 KBSutharsan
#42 drupal-provide_a_proper_api-2631584-42.patch32.7 KBSutharsan
#41 drupal-provide_a_proper_api-2631584-41.patch32.77 KBSutharsan
#41 interdiff-2631584-40-41.txt6.23 KBSutharsan
#40 drupal-provide_a_proper_api-2631584-40.patch32.45 KBSutharsan
#29 drupal-provide_a_proper_api-2631584-29.patch32.44 KBKristen Pol
#29 interdiff-2631584-26-29.txt3.26 KBKristen Pol
#26 2631584-26.patch32.24 KBtstoeckler
#26 2631584-24-26-interdiff.txt2.76 KBtstoeckler
#24 2631584-24.patch32.98 KBtstoeckler
#24 2631584-21-24-interdiff.txt1.91 KBtstoeckler
#21 2631584-21--locale-update-api.patch33.13 KBtstoeckler
#21 2631584-7-9-interdiff.txt27.98 KBtstoeckler
#7 2631584-7-diff.patch11.2 KBnaveenvalecha
#7 interdiff-2631584-2-7.patch2.33 KBnaveenvalecha
#2 2631584-2-locale-update-api.patch10.9 KBtstoeckler
Support from Acquia helps fund testing for Drupal Acquia logo

Comments

tstoeckler created an issue. See original summary.

tstoeckler’s picture

Status: Active » Needs review
FileSize
10.9 KB

Just to get the ball rolling. This should be 100% backwards compatible, so tagging for 8.1.x. The only possible breaks are the constructor changes in the form and controller but we do not treat those as APIs.

tstoeckler’s picture

Issue tags: +D8MI, +sprint, +language-interface
Gábor Hojtsy’s picture

Status: Needs review » Reviewed & tested by the community

Looks good to me. Makes sense to API-ify this.

tstoeckler’s picture

+++ b/core/modules/locale/src/TranslationUpdater.php
@@ -0,0 +1,92 @@
+
+
...
+}
+

Some additional newlines, can maybe be fixed on commit (or not TBH, I guess it's not a big deal...).

catch’s picture

Status: Reviewed & tested by the community » Needs work
  1. +++ b/core/modules/locale/src/TranslationUpdater.php
    @@ -0,0 +1,92 @@
    +    locale_translation_flush_projects();
    

    This could use the locale.project service.

  2. +++ b/core/modules/locale/src/TranslationUpdater.php
    @@ -0,0 +1,92 @@
    +    $this->moduleHandler->loadInclude('locale', 'inc', 'locale.compare');
    

    Also this is quite sad (and the includes in ::update() below) - is there an issue we can link to for moving that functionality to a class too?

naveenvalecha’s picture

Status: Needs work » Needs review
FileSize
2.33 KB
11.2 KB

Address #6.1
#6.2 looks like there is already one. is this is one #1834298 ?

The last submitted patch, 7: interdiff-2631584-2-7.patch, failed testing.

Version: 8.1.x-dev » 8.2.x-dev

Drupal 8.1.0-beta1 was released on March 2, 2016, which means new developments and disruptive changes should now be targeted against the 8.2.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Kristen Pol’s picture

Thanks for the patch! I reviewed the code and noticed a few minor things.

  1. +++ b/core/modules/locale/src/TranslationUpdater.php
    @@ -0,0 +1,100 @@
    +    // Check translation status of all translatable project in all languages.
    

    Plural change: project => projects.

  2. +++ b/core/modules/locale/src/TranslationUpdater.php
    @@ -0,0 +1,100 @@
    +    // translation updates. If the status is expired we clear it an run a batch to
    

    Typo: an => and.

    Nitpick: Over 80 characters.

  3. +++ b/core/modules/locale/src/TranslationUpdater.php
    @@ -0,0 +1,100 @@
    +
    

    Nitpick: Extra line.

  4. +++ b/core/modules/locale/src/TranslationUpdaterInterface.php
    @@ -0,0 +1,59 @@
    +   *   $translation_update->check()
    

    Missing semi-colon?

  5. +++ b/core/modules/locale/src/TranslationUpdaterInterface.php
    @@ -0,0 +1,59 @@
    +   *   $translation_update->update()
    

    Missing semi-colon?

Kristen Pol’s picture

What is the best way to test this?

tstoeckler’s picture

On a site with Interface Translation enabled you should click the "Check manually" link on the "Available translation updates" screen. That is the check() part. Assuming there are translation updates, importing them through the UI tests the update() part. In both cases there should be no change before and after the patch and everything should just work as this is merely a refactor to allow Drush (or other scripts) to be more sane.

tstoeckler’s picture

Oh, and thanks for the review.

I will try to get back to this, but...:

Re #6 in theory I agree, that the current code is still suboptimal but if you look at the actual code that is being called you will see the giant spaghetti monster that locale.module is. That is not to insult anyone who worked on locale, in fact the amount of features we were able to add to it, before the New World Order (tm) kicked in is quite impressive. Also Batch-non-API (again, no offense) doesn't help but instead is its own spaghetti monster fighting against the one that it Locale. So at the moment it is not easy to much more of a refactor other than #2/#7 complete refactoring the whole module and Batch API entirely. I.e. even adding a @todo is rather hard, unless I open an issue with the title "Refactor Locale module", with issue summary "@todo" (and postponed on an issue "Refactor Batch API"), which seems rather pointless to me. I had originally planned to submit a little bit nicer code in #2 but then ended up failing due to the above point.

Kristen Pol’s picture

I tested the patch on a local site. The check is fine. I'm having a hard time testing the manual update since there aren't new translations since the last update.

One thing I noticed when testing is that if I choose:

Overwrite existing translations.

for:

Import behavior

it does not affect doing a manual update. The description does say it's for "automatic" updates:

How to treat existing translations when automatically updating the interface translations.

but that doesn't seem very intuitive to me. Why should a manual update behave differently than an automatic update?

I was hoping that I could check the update by:

  1. Add language (it runs the update)
  2. Manually remove some translations
  3. Choose "Overwrite existing translations." in the settings
  4. Run a manual update
  5. The translations I removed would be added back

But since manual vs automatic updates behave differently then I can't test this way. I'm unclear how else I can test without mucking with the database directly since I don't have an D8 site that is old enough to have some missing translations but not old enough that it's not on a way older version of D8.

Thoughts?

Gábor Hojtsy’s picture

Which URL did you run the manual updates from? Which admin page?

Kristen Pol’s picture

I have found the link I used. Go to:

/admin/config/regional/translate/settings

and it has a link with text:

Check updates now

and if you click that it does the check and you end up on:

/admin/reports/translations

which also has a:

Check manually

link that does the same thing. The link is linked to:

/admin/reports/translations/check

I'll see if I can reproduce the issue of manual vs automatic update difference and open a new issue if I can reproduce.

Kristen Pol’s picture

Also, it's possible that this is because there are no updates so it's not changing back my custom translations. If so, then it might apply to both manual and automatic updates. That would be a different issue.

Recap: There appear to be 2 possibilities:

1) The custom translations aren't wiped out for manual updates but are for automatic.

or

2) The custom translations aren't wiped out for manual or automatic updates when there are no new translations from localize.drupal.org.

My feeling now is it's the latter. I'll be doing some testing locally to see if I can figure that out.

andypost’s picture

+++ b/core/modules/locale/src/TranslationUpdater.php
@@ -0,0 +1,100 @@
+    $options = _locale_translation_default_update_options();
...
+      $batch = locale_translation_batch_update_build(array(), $langcodes, $options);
...
+      $batch = locale_translation_batch_fetch_build($projects, $langcodes, $options);
+      batch_set($batch);
...
+      if ($batch = locale_config_batch_update_components($options, $langcodes)) {
+        batch_set($batch);

a lot of procedures without wrappers

Gábor Hojtsy’s picture

@Kristen: yeah I can imagine it sees the .po files don't need updating and it does not reimport them since they were not updated, therefore not overwriting your customizations even though you wanted that. That sounds very plausible :)

Kristen Pol’s picture

I have confirmed that it was scenario 2 in #17 as I added a bunch of languages locally yesterday, changed the same translations for 3 strings for all languages, and just now ran a manual update. There was an update for Italian and that updated the custom Italian strings but the other languages are unchanged. I guess that kind of makes sense unless you want force getting the latest strings. But, then I guess you can do the manual po files though that's kind of a pain.

The good thing is that it worked so the patch is fine from that perspective. But, now I see #18 so maybe it needs to be updated?

tstoeckler’s picture

Fixed the reviews and tried one more time to remove some of the function calls. Like I tried to explain above I'm not touching those related to batch API. Without an OO batch API we need to call batch API anyway, so I don't see much value in that.

When I had to inject the translation updater into locale's import form I wondered whether that is actually a good place to put the getDefaultOptions() method. It seems there could be a separate translation importer, that the form should use and that the translation updater should inject. What do people think?

I just realized I named the interdiff wrong, but it should have the correct contents.

Status: Needs review » Needs work

The last submitted patch, 21: 2631584-21--locale-update-api.patch, failed testing.

penyaskito’s picture

When I had to inject the translation updater into locale's import form I wondered whether that is actually a good place to put the getDefaultOptions() method. It seems there could be a separate translation importer, that the form should use and that the translation updater should inject. What do people think

I love the idea, but probably worth to do it in a follow-up issue.
I would love to have this in core, which we can iterate later.

Nitpicks:

  1. +++ b/core/modules/locale/src/TranslationUpdater.php
    @@ -0,0 +1,125 @@
    +/**
    + * @file
    + * Contains \Drupal\locale\TranslationUpdater.
    + */
    
    +++ b/core/modules/locale/src/TranslationUpdaterInterface.php
    @@ -0,0 +1,127 @@
    +/**
    + * @file
    + * Contains \Drupal\locale\TranslationUpdaterInterface.
    + */
    

    We don't want those anymore.

  2. +++ b/core/modules/locale/src/TranslationUpdater.php
    @@ -0,0 +1,125 @@
    +   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
    +   *   The configuration factory.
    +   *
    

    Coder complains about the extra empty line in this docblock.

tstoeckler’s picture

Status: Needs work » Needs review
FileSize
1.91 KB
32.98 KB

Here we go.

Status: Needs review » Needs work

The last submitted patch, 24: 2631584-24.patch, failed testing.

tstoeckler’s picture

Status: Needs work » Needs review
FileSize
2.76 KB
32.24 KB

Learned something new today: A module's classes are not available when including the .module file. So reverted those constant changes.

Kristen Pol’s picture

Status: Needs review » Reviewed & tested by the community

I tested the patch from #26 using the steps from #16 and got no errors. I checked the interdiffs from #26 and #24 and do not see anything wrong and see that #24 interdiff addresses items from #23. Marking RTBC.

andypost’s picture

Status: Reviewed & tested by the community » Needs work
+++ b/core/modules/locale/locale.module
@@ -83,6 +84,9 @@
+ * @deprecated Will be removed in Drupal 9. Use

@@ -91,6 +95,10 @@
+ * @deprecated Will be removed in Drupal 9. Use

@@ -98,28 +106,45 @@
+ * @deprecated Will be removed in Drupal 9. Use
...
+ * @deprecated Will be removed in Drupal 9. Use
...
+ * @deprecated Will be removed in Drupal 9. Use
...
+ * @deprecated Will be removed in Drupal 9. Use
...
+ * @deprecated Will be removed in Drupal 9. Use

+++ b/core/modules/locale/locale.translation.inc
@@ -426,16 +426,11 @@ function _locale_translation_source_compare($source1, $source2) {
+ * @deprecated Will be removed in Drupal 9. Use

Should be properly deprecated
@deprecated in Drupal 8.2.0, will be removed before Drupal 9.0.0.

Kristen Pol’s picture

Thanks for the review. I have updated the patch with the changes from #28.

Kristen Pol’s picture

Status: Needs work » Needs review

Version: 8.2.x-dev » 8.3.x-dev

Drupal 8.2.0-beta1 was released on August 3, 2016, which means new developments and disruptive changes should now be targeted against the 8.3.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

penyaskito’s picture

Status: Needs review » Needs work
Issue tags: +Needs change record

Thanks! Patch looks good, but 8.2.0 was already released (sorry for the late review). We should change this. Otherwise looks good to me. We will need a change record too.

+++ b/core/modules/locale/locale.module
@@ -83,6 +84,9 @@
+ * @deprecated in Drupal 8.2.0, will be removed before Drupal 9.0.0. Use

Version: 8.3.x-dev » 8.4.x-dev

Drupal 8.3.0-alpha1 will be released the week of January 30, 2017, which means new developments and disruptive changes should now be targeted against the 8.4.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Gábor Hojtsy’s picture

Anyone planning to pick this up today for Global Sprint Weekend?

tstoeckler’s picture

Assigned: Unassigned » tstoeckler

Writing a change notice now.

tstoeckler’s picture

Assigned: tstoeckler » Unassigned
Issue tags: -Needs change record

Kept the change notice generic, so we can add more functions to it when we deprecate more stuff. To be perfectly honest, I actually did it this way because I thought we were deprecating more functions. Obviously feel free to rewrite.

tstoeckler’s picture

Issue tags: +#SprintWeekend2017
Gábor Hojtsy’s picture

Issue tags: -#SprintWeekend2017 +SprintWeekend2017

Version: 8.4.x-dev » 8.5.x-dev

Drupal 8.4.0-alpha1 will be released the week of July 31, 2017, which means new developments and disruptive changes should now be targeted against the 8.5.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Sutharsan’s picture

Re-rolled the patch. It did no apply due to the array syntax change.

Sutharsan’s picture

Status: Needs work » Needs review
FileSize
6.23 KB
32.77 KB

- Changed the version in the deprecation info to 8.5.0
- Changed the deprecated REQUEST_TIME to time::getRequestTime(). Don't think it is good to put deprecated stuff in the new TranslationUpdater class.

Sutharsan’s picture

Sutharsan’s picture

Issue summary: View changes
tstoeckler’s picture

Thanks @Sutharsan for picking this up!!!

Moving back to RTBC per #27. Even though I contributed to this patch since #27 only minor commend adjustments were requested and those have been updated, so I think it's fair for me to re-RTBC this.

tstoeckler’s picture

Status: Needs review » Reviewed & tested by the community

Ahem.

Sutharsan’s picture

Status: Reviewed & tested by the community » Needs work

Oh, sorry to spoil the party, but I had a pending review I just couldn't finish this morning.

Checked that deprecated constants and function are not used anywhere on core.
Checked comments of new class, interface, constants, methods.

Some things to work on though...

  1. +++ b/core/modules/locale/locale.module
    @@ -98,28 +106,45 @@
    + *
    + * @deprecated in Drupal 8.5.0, will be removed before Drupal 9.0.0. Use
    + *   \Drupal\locale\TranslationUpdaterInterface::DEFAULT_SERVER_PATTERN instead.
      */
     const LOCALE_TRANSLATION_DEFAULT_SERVER_PATTERN = 'https://ftp.drupal.org/files/translations/%core/%project/%project-%version.%language.po';
     
    

    This should not be modified in this patch. It is not used in the TranslationUpdater server and it is not part of the high level update proces but it is used in the check/fetch process.

  2. +++ b/core/modules/locale/locale.module
    @@ -98,28 +106,45 @@
    + *
    + * @deprecated in Drupal 8.2.0, will be removed before Drupal 9.0.0. Use
    + *   \Drupal\locale\TranslationUpdaterInterface::STATUS_TTL instead.
      */
    

    Version in deprecation text is not correct.

  3. +++ b/core/modules/locale/src/TranslationUpdaterInterface.php
    @@ -0,0 +1,122 @@
    +  /**
    +   * Imports the available translation updates.
    +   *
    +   * Note that this does not actually check whether translation updates are
    +   * available, TranslationUpdateInterface::check() needs to be used for that.
    +   *
    

    Comment incorrect. It _does_ check whether translation updates are available. But only if previous check was executec more than 10 minutes ago (TranslationUpdaterInterface::STATUS_TTL).

Sutharsan’s picture

Status: Needs work » Needs review
FileSize
2.43 KB
31.84 KB

#46 comments processed.

langelhc’s picture

I found that 'instead' word is duplicated on local.module

Version: 8.5.x-dev » 8.6.x-dev

Drupal 8.5.0-alpha1 will be released the week of January 17, 2018, which means new developments and disruptive changes should now be targeted against the 8.6.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.6.x-dev » 8.7.x-dev

Drupal 8.6.0-alpha1 will be released the week of July 16, 2018, which means new developments and disruptive changes should now be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

cilefen’s picture

Version: 8.7.x-dev » 8.8.x-dev

Drupal 8.7.0-alpha1 will be released the week of March 11, 2019, which means new developments and disruptive changes should now be targeted against the 8.8.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.0-alpha1 will be released the week of October 14th, 2019, which means new developments and disruptive changes should now be targeted against the 8.9.x-dev branch. (Any changes to 8.9.x will also be committed to 9.0.x in preparation for Drupal 9’s release, but some changes like significant feature additions will be deferred to 9.1.x.). For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.9.x-dev » 9.1.x-dev

Drupal 8.9.0-beta1 was released on March 20, 2020. 8.9.x is the final, long-term support (LTS) minor release of Drupal 8, which means new developments and disruptive changes should now be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Kristen Pol’s picture

Category: Task » Feature request
Status: Needs review » Needs work
Issue tags: +Needs reroll

The patch needs a reroll if this issue is still relevant (I asked in the #multilingual Slack channel but no one chimed in).

vsujeetkumar’s picture

Status: Needs work » Needs review
Issue tags: -Needs reroll
FileSize
23.22 KB

Re-roll patch created, Please have a look.

Kristen Pol’s picture

Status: Needs review » Needs work

Take a look at the "15 coding standards messages" noted here:

https://www.drupal.org/pift-ci-job/1769855

vsujeetkumar’s picture

Status: Needs work » Needs review
FileSize
23.39 KB
3.81 KB

@Kristen Pol Fixed the "coding standards messages", Please have a look.

Kristen Pol’s picture

Status: Needs review » Needs work

Thanks for the update. Sorry, I should have looked at the patch prior to comment #57.

I only scanned the patch for obvious issues and did not review for the approach as it was reviewed above by @tstoeckler and @Sutharsan. The only obvious thing that that needs changing are the versions:

  1. +++ b/core/modules/locale/locale.module
    @@ -88,6 +89,11 @@
    + * @deprecated in drupal:8.5.0 and is removed from drupal:9.0.0. Use
    

    Change versions to 9.1.0 and 10.0.0, e.g. @deprecated in drupal:9.1.0 and is removed from drupal:10.0.0.

  2. +++ b/core/modules/locale/locale.module
    @@ -96,6 +102,12 @@
    + * @deprecated in drupal:8.5.0 and is removed from drupal:9.0.0. Use
    

    Same as above.

  3. +++ b/core/modules/locale/locale.module
    @@ -108,23 +120,44 @@
    + * @deprecated in drupal:8.5.0 and is removed from drupal:9.0.0. Use
    

    Same as above.

  4. +++ b/core/modules/locale/locale.module
    @@ -108,23 +120,44 @@
    + * @deprecated in drupal:8.5.0 and is removed from drupal:9.0.0. Use
    

    Same as above.

  5. +++ b/core/modules/locale/locale.module
    @@ -108,23 +120,44 @@
    + * @deprecated in drupal:8.5.0 and is removed from drupal:9.0.0. Use
    

    Same as above.

  6. +++ b/core/modules/locale/locale.module
    @@ -108,23 +120,44 @@
    + * @deprecated in drupal:8.5.0 and is removed from drupal:9.0.0. Use
    

    Same as above.

  7. +++ b/core/modules/locale/locale.translation.inc
    @@ -431,16 +431,13 @@ function _locale_translation_source_compare($source1, $source2) {
    + * @deprecated in drupal:8.5.0 and is removed from drupal:9.0.0. Use
    

    Same as above.

Also, it would be good to double check that I didn't miss any of these.

vsujeetkumar’s picture

Status: Needs work » Needs review
FileSize
23.4 KB
2.84 KB

@Kristen Pol changes has been done according to #59, Please have a look.

Kristen Pol’s picture

Thanks for the update. The changes address #59.

Now we need to see if tests come back green.

vsujeetkumar’s picture

@Kristen Pol, Fixed the test, Please review.

Kristen Pol’s picture

Issue summary: View changes
Issue tags: +Needs manual testing

Thanks for the update.

1) I was confused why the interdiff was so large and then I went back through the old patches and see that the class and interface you added were there back in #48 and then got accidentally removed in #56. I compared the new patch with #48 and the differences seem ok:

a) Changed @deprecated in Drupal 8.5.0, will be removed before Drupal 9.0.0. to @deprecated in drupal:9.1.0 and is removed from drupal:10.0.0. as requested in #59.

b) Added @see https://www.drupal.org/node/2847622 which is the change record that was created in 2017 (!). This was added starting in patch #58.

Note that I just updated the change record to reference the 9.1.x branch.

c) drupal_set_message is switched to $this->messenger()->addStatus due to deprecation.

d) $this->url was changed to Url::fromRoute due to deprecation.

2) Tests pass.

3) Code was reviewed previously by @tstoeckler and @Sutharsan.

4) I've updated the issue summary to strike out what I know has been done. What I'm unclear about is if additional tests need to be added as the issue summary says to write tests yet the "Needs tests" tag was never added and there aren't any comments about writing tests.

5) Tagging for manual testing as it's probably good to double check this even though automated tests passed.

Kristen Pol’s picture

Status: Needs review » Needs work
Issue tags: -Needs manual testing +Needs tests
FileSize
88.65 KB
69.28 KB

I tested this as following. At first I was going to try to wait for awhile to see if translations were added to test the update part but I found a way to cheat.

1) Add a language but very quickly use the browser back button so that it doesn't pull over the translations

2) You see a message the language was added

3) Go to /admin/reports/translations

4) Click Check manually link

5) You will see that there are translations available

6) Click Update translations button

7) Translation will be added

8) Go to /admin/config/regional/translate/settings

9) Click Check updates now. link

10) You will see that the projects were checked

This worked as expected. Moving back to needs work for tests in case more need to be added.

Version: 9.1.x-dev » 9.2.x-dev

Drupal 9.1.0-alpha1 will be released the week of October 19, 2020, which means new developments and disruptive changes should now be targeted for the 9.2.x-dev branch. For more information see the Drupal 9 minor version schedule and the Allowed changes during the Drupal 9 release cycle.

Version: 9.2.x-dev » 9.3.x-dev

Drupal 9.2.0-alpha1 will be released the week of May 3, 2021, which means new developments and disruptive changes should now be targeted for the 9.3.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.0-rc1 was released on November 26, 2021, which means new developments and disruptive changes should now be targeted for the 9.4.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

mglaman’s picture

When, if, this lands: we will need phpstan-drupal to be explicitly updated to check for these constants in https://github.com/mglaman/phpstan-drupal/blob/main/src/Rules/Deprecatio...

Version: 9.4.x-dev » 9.5.x-dev

Drupal 9.4.0-alpha1 was released on May 6, 2022, which means new developments and disruptive changes should now be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.5.x-dev » 10.1.x-dev

Drupal 9.5.0-beta2 and Drupal 10.0.0-beta2 were released on September 29, 2022, which means new developments and disruptive changes should now be targeted for the 10.1.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 10.1.x-dev » 11.x-dev

Drupal core is moving towards using a “main” branch. As an interim step, a new 11.x branch has been opened, as Drupal.org infrastructure cannot currently fully support a branch named main. New developments and disruptive changes should now be targeted for the 11.x branch, which currently accepts only minor-version allowed changes. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.