#49625 closed defect (bug) (wontfix)
load_theme_textdomain() opens local files without domain in their name
Reported by: | marekdedic | Owned by: | |
---|---|---|---|
Milestone: | Priority: | normal | |
Severity: | normal | Version: | |
Component: | I18N | Keywords: | |
Focuses: | Cc: |
Description (last modified by )
Hi,
I am developing a theme called crdm-modern
and want to add translations for the language cs_CZ
. I want to load local .mo
files as the translations. In order to do that, I placed a file called crdm-modern-cs_CZ.mo
in the theme in the languages
folder. I tried to use this by calling load_theme_textdomain( 'crdm-modern', get_stylesheet_directory() . '/languages' )
. However this failed.
Looking at the source of the function load_theme_textdomain()
https://developer.wordpress.org/reference/functions/load_theme_textdomain/, I see the following line:
return load_textdomain( $domain, $path . '/' . $locale . '.mo' );
So this would load the file languages/cs_CZ.mo
. I think this is a bug and it should instead try to load the file languages/crdm-modern-cs_CZ.mo
. This would be in line with how the function load_plugin_textdomain()
works - that's wha I think it is a bug.
Looking at the code, I think the issue was introduced in [37414] and could be solved by replacing
return load_textdomain( $domain, $path . '/' . $locale . '.mo' );
with
return load_textdomain( $domain, $path . '/' . $mofile );
Change History (4)
#2
@
5 years ago
- Milestone Awaiting Review deleted
- Resolution set to wontfix
- Status changed from new to closed
- Version 5.3.2 deleted
#3
in reply to:
↑ description
@
5 years ago
Hi there, thanks for the ticket!
Replying to marekdedic:
Looking at the code, I think the issue was introduced in [37414]
As noted above, while [37414] rearranged some logic, loading $locale.mo
instead of {$domain}-{$locale}.mo
from the theme's directory is not new, it works this way since the introduction in [1808].
Some history:
This is reflected in load_theme_textdomain() description:
If the current locale exists as a .mo file in the theme's root directory, it will be included in the translated strings by the
$domain
.
The .mo files must be named based on the locale exactly.
Hello @marekdedic, thanks for the report!
It’s correct that the loading of theme translation files differs from plugin files. This was always the case, even before your linked changeset.
Due to backward compatibility we can’t just change it. We the introduction of lazy loading and language packs there also wouldn’t be any benefit in changing it now after so many years. To be honest, plugins should rather not have the text domain.