I was having the same problem and this is how I solved it:
First, the generated JSON file has some errors. You need to update where it says messages
with your text domain. There are three places where that needs to be changed. I also had to change the lang
attribute to be all lowercase with a dash. Here are the fields I changed:
{
"domain": "my-text-domain",
"locale_data": {
"my-text-domain": { // Instead of "messages"
"": {
"domain": "my-text-domain",
"lang": "es-es"
},
...
}
}
}
Second, the file name with the md5 hash tends to have the wrong md5 hash, so it’s best to rename the file to {domain}-{locale}-{script-name}.json
, so mine became my-text-domain-es_ES-my-script-name.js
.
Third, the wp_set_script_translations
function needs to be called with the right path, and attached to the right hook. This is what I had to do, since I was localizing an admin-side script:
function enqueue_scripts() {
wp_set_script_translations( 'script-name', 'my-text-domain', plugin_dir_path( dirname(__FILE__) ) . 'languages' );
}
add_action( 'admin_enqueue_scripts', 'enqueue_scripts' );
Try echoing out the value of plugin_dir_path( dirname(__FILE__) ) . 'languages'
to make sure you’re getting the path where your translation files are.
Once I sorted out all of these little details, my translations started working, so I hope this helps someone else!