Title: How to translate javascript files from theme folder without plugin ?
Last modified: September 18, 2023

---

# How to translate javascript files from theme folder without plugin ?

 *  Resolved [soimagine](https://wordpress.org/support/users/soimagine/)
 * (@soimagine)
 * [2 years, 8 months ago](https://wordpress.org/support/topic/how-to-translate-javascript-files-from-theme-folder-without-plugin/)
 * Hi.
   I can’t understand why the documentation of WordPress allow only the javascript
   translation from plugin and not directly from functions.php inside theme folder?
   The translation for `PHP` files of theme folder works perfectly. Also for the`
   PHP` files from my custom plugin.
 * Why do I have to create a plugin just to load a json file from the languages 
   folder inside the theme folder?
 * The `$handle` parameter from `wp_set_script_translations()` and `load_script_translations()`
   allow only enqueue javascript files, but my main javascript file is added in 
   footer.php of theme folder `<script type="text/javascript"> `
   Does exist a wp
   hook or a wp function to load json file or .po file without plugin ? Or can we
   do it with php alone?

Viewing 4 replies - 1 through 4 (of 4 total)

 *  Moderator [bcworkz](https://wordpress.org/support/users/bcworkz/)
 * (@bcworkz)
 * [2 years, 8 months ago](https://wordpress.org/support/topic/how-to-translate-javascript-files-from-theme-folder-without-plugin/#post-17060372)
 * I think the set function just establishes the path to the correct translation
   file, so if you want to load that file for your un-enqueued script you’d need
   to establish the path through your own means.
 * The PHP load function basically just calls `file_get_contents()`. You can do 
   that yourself and output the file contents as inline script. The script translations
   file is a JSON object, so you’d want to assign it to a JS var for use in your
   script. Since you’re working outside of the WP enqueue scheme, your script would
   directly access the data in your translations object var.
 * Untested, but I’m reasonably sure it’ll work. You still need to create a plugin
   or child theme to contain your PHP code, there’s no other alternative for custom
   code. So IMO you may as well enqueue your script and work within the WP paradigm.
   Enqueuing scripts and translation files work just as well from a parent or child
   functions.php as they would from a plugin.
 *  Thread Starter [soimagine](https://wordpress.org/support/users/soimagine/)
 * (@soimagine)
 * [2 years, 8 months ago](https://wordpress.org/support/topic/how-to-translate-javascript-files-from-theme-folder-without-plugin/#post-17062217)
 * @[bcworkz](https://wordpress.org/support/users/bcworkz/), Thanks.
   I Indeed enqueued
   my file.js which was integrated in footer.php.I checked with `wp_script_is()`
   that is was correctly enqueued. It’s good.
 * Theme/functions.php
 *     ```wp-block-code
       add_filter('locale', 'getnewlocale');
       function getnewlocale($locale) {
          $gen_locale = explode('/',$_SERVER["REQUEST_URI"])[1];
          if ( !is_admin() ) {
            $locale = ($gen_locale == 'fr') ? 'fr_FR' : (($gen_locale == 'en') ? 'en_GB' : '' );
          return $locale;
       }
       }
   
       add_action("after_setup_theme", function () {
          load_theme_textdomain( 'ActivUs', get_stylesheet_directory() . '/languages' );
       });
   
       function actionjs_enqueue_scripts() {
          wp_enqueue_script( 'main-action', get_template_directory_uri() . '/script/action.js', array('jquery', 'wp-i18n' ), '1.0.0', true);
   
       }
       add_action( 'wp_enqueue_scripts', 'actionjs_enqueue_scripts' );
   
       function load_js_text_domain(){
       	wp_set_script_translations( 'main-action', 'Activus', get_stylesheet_directory().'/languages');
       	//var_dump(wp_script_is( 'main-action', 'enqueued' )); OK
       }
       add_action( 'wp_enqueue_scripts', 'load_js_text_domain', 100 );
       ```
   
 * 
   But I’m always stuck because my internationalized string in my file.js are still
   not loaded.
 * The translation gettext `__('string',text-domain');` is recognised correctly 
   inside file.js (with id=”main-action”) and the default language (fr) is displayed
   correctly, but not for en_GB.
 * **the strings of characters to be translated are inside the on(‘click’,…) functions
   in file.js.**
 * The script to read internationalized string inside file.js
   Theme/script/file.
   js :
 *     ```wp-block-code
       var localeData = $('html').prop('lang');
       localeData = localeData.replace('-', '_'); //return en_GB
       const { __ } = wp.i18n;
       const textdomain = 'text-domain';
       __( '__', 'ActivUs' );
       wp.i18n.setLocaleData(localeData,'text-domain');
       ```
   
 * Files in the “Theme/languages” folder :
 *     ```wp-block-code
       textdomain-en_GB-main-action.json
       en_GB.mo
       en_GB.po
       text-domain.pot
       ```
   
 * Example of Theme/languages/en_GB.po file:
 *     ```wp-block-code
       #: script/file.js:969
       #: script/file.js:2094
       msgid "Revenir à la page précédente"
       msgstr "Go back to previous page"
       ```
   
 * Thanks for your help
 *  Moderator [bcworkz](https://wordpress.org/support/users/bcworkz/)
 * (@bcworkz)
 * [2 years, 8 months ago](https://wordpress.org/support/topic/how-to-translate-javascript-files-from-theme-folder-without-plugin/#post-17063855)
 * I’m afraid my ability to help further falls short. I had a good idea how to load
   translations outside of the wp-i18n scheme and had a feeling that enqueuing and
   doing it the WP way would be better, but I don’t know how the JS part of translations
   really work. I assumed if you did all the right things it would just work. It
   seems like you’ve done all the right things, yet it’s not working 🙁
 * I think you may need to call `load_script_translations()` yourself? I think when
   translations are left for the polyglots team that wp-i18n does this for you, 
   but when you provide your own translation files you need to do this yourself?
   It’s similar to what happens with PHP translations. We often do not see the call
   in examples because the use of polyglots team translations are assumed.
 * Whether it’s needed or not, it wouldn’t hurt to give it a try 🙂 At worst it’s
   redundant and unnecessary and less performative.
 *  Thread Starter [soimagine](https://wordpress.org/support/users/soimagine/)
 * (@soimagine)
 * [2 years, 8 months ago](https://wordpress.org/support/topic/how-to-translate-javascript-files-from-theme-folder-without-plugin/#post-17065485)
 * I resolved my issue.
   the problem come from the language use by the json file 
   instantiation. The language code used is only [[ISO 639]](https://en.wikipedia.org/wiki/fr:Liste_des_codes_ISO_639-1)
   and not both of them [[ISO 639]](https://en.wikipedia.org/wiki/fr:Liste_des_codes_ISO_639-1)_
   [[ISO 3166]](https://en.wikipedia.org/wiki/fr:ISO_3166-1#Table_de_codage).
 * That means that you can’t distinguish between ‘en_US’ and ‘en_GB’. So it makes
   no sense to name .po and .json files with the locale (en_GB) if json use only
   ISO 639 to retrieve the language used.
 * Also I didn’t find a Cli Command to update the .json file .
   The documentation
   define “make-json” only to create.If I do a “make-json on exiting .json file 
   I’m losing all the translations.
 * So script must be like that :
 *     ```wp-block-code
       "locale_data": {
               "messages": {
                   "": {
                       "domain": "your-text-domain",
                       "lang": "en", // And not "en_GB", only ISO 639
                       "plural-forms": "nplurals=2; plural=(n != 1);"
                   },
       ```
   

Viewing 4 replies - 1 through 4 (of 4 total)

The topic ‘How to translate javascript files from theme folder without plugin ?’
is closed to new replies.

## Tags

 * [javascript](https://wordpress.org/support/topic-tag/javascript/)
 * [Localization](https://wordpress.org/support/topic-tag/localization/)

 * In: [Developing with WordPress](https://wordpress.org/support/forum/wp-advanced/)
 * 4 replies
 * 2 participants
 * Last reply from: [soimagine](https://wordpress.org/support/users/soimagine/)
 * Last activity: [2 years, 8 months ago](https://wordpress.org/support/topic/how-to-translate-javascript-files-from-theme-folder-without-plugin/#post-17065485)
 * Status: resolved

## Topics

### Topics with no replies

### Non-support topics

### Resolved topics

### Unresolved topics

### All topics
