i18n l10n – How to use a module-relative path to translations in .info.yml

I’m new to using Drupal and am building a custom module to learn how it all works.

I’m building my module in modules/custom/my_module. I have a Dutch locale file in modules/custom/my_module/translations/my_module-0.1.nl.po.

If I specify it like that in my .info.yml file, it works great:

name: My Module
description: Just testing
version: 0.1
package: Custom
type: module
core_version_requirement: ^8.8 || ^9
'interface translation project': my_module
'interface translation server pattern: modules/custom/my_module/translations/%project-%version.%language.po

But, now my .info.yml file would force users to install this module in modules/custom/my_module. I don’t want that. I don’t care where they put it. They can put this module in modules/contrib/my_module or sites/all/modules/my_module for all I care. Maybe someone will include it as a packaged dependency and it will end up in modules/custom/some_module/modules/my_module. It shouldn’t matter and I don’t want to hard-code the module path in my .info.yml.

What I want is to have my .info.yml file specify the server pattern using a module-relative path (relative to where my module’s .info.yml file lives) like this:

'interface translation server pattern': translations/%project-%version.%language.po
# or perhaps as:                        ./translations/%project-%version.%language.po

But Drupal doesn’t like this and checking for updates to translations will indicate the file could not be found.

I’m aware of the translations:// and public:// stream wrappers, but as far as I can tell this either requires the translation file to be hosted elsewhere, copied to the sites/default/files folder (which I could probably do in my_module_install() but is unhandy during development when I’m constantly adding strings) or (again) hardcoding the path to the module.

For now I’ve implemented the hook_locale_translation_projects_alter() hook in my my_module.module file to set an absolute path like this:

function my_module_locale_translation_projects_alter(&$projects) {
  $projects('my_module')('info')('interface translation server pattern') =
    __DIR__ . '/translations/%project-%version.%language.po';
}

This works, but it feels like a nasty workaround and not how Drupal is intended to work.

What is the usual method to get module-relative paths to work for translations?