Support » Plugin: Wordfence Security - Firewall & Malware Scan » Old but still neccessary – Translation “Option” for Wordfence

  • Hi,

    I know, that this topic is an old one. But as I searched again if there is a solution, other than changing after every update the wfLockedOut.php File, I realized that it started about over 3 Years ago. Back then you mentioned that you and your Team will look into it.

    2 1/2 Years ago you wrote:

    Internationalization is on our product road map and we have made some changes that are in preparation for that … Hopefully we can get to this in the near future, though we have a few ideas that might address internationalization in the interim. I can tell you that there is a pretty big update coming soon that’s going to be sweet.

    Nearly a year ago you wrote:

    This is an important feature that’s on our road map, but unfortunately, I don’t have a timeline for you. Other features have just taken priority like our just recently released Login Security features that include Two-Factor, reCAPTCHA and improved XML-RPC protection. However, I definitely understand the need for this and will share your thoughts with the team.

    So maybe you can finally, after years of requests, tell us what’s this all about?

    Are you really looking into this?

    I don’t want to be rude. I liked this Plugin, but we had to switch over to iThemes Security – because a German Website, with an English Error Page is not professional – customers became insecure. We had Premium Licences too.

    Now our last Customer with Wordfence is requesting to finally switch to another Plugin. With over 10.000 registered Users, a fairly big Website with a strong Social Community. Making fun of us on Social Media with Screenshots because of this mentioned Error Pages… it gets embarrassing.

    This is truly a great Plugin! This is only about translation!

    So my final question:

    Is it somehow realistic to believe that this option will actually be available in the near future, or just the possibility to change the language using .mo files?

    An honest answer would be really desirable.

    Again, this is a great plugin! However, if you are dependent on a different language, unfortunately it is not optimal.

    Thank you for your work and efforts to make our pages safe !!!

    Best regards

Viewing 13 replies - 1 through 13 (of 13 total)
  • I just created a support ticket on their support system about this same issue, translation of WordFence is absolutely necessary for many costumers.

    I hope they are reading and listening, better yet, doing something about it.

    • This reply was modified 10 months, 2 weeks ago by Eli.
    Thread Starter MikkelCrunch



    Unfortunately their answer to my e-mail is the same they have been offering for the last 3+ years.

    Hi Eli,

    Thanks for reaching out.

    Internationalization is on our product road map but as security is ever changing and requires constant work to stay on top of we have been unable to complete this. As new code is added or existing code is modified we have been adding the necessary changes to support translations so work is proceeding in that direction. Hopefully work will be able to continue. I will make sure and mention this to the dev and qa teams so that they understand this is important to you.

    While I cannot promise that every suggestion we get makes it into a release, or when that might be I can tell you that every suggestion we get is evaluated carefully and considered seriously. We value the input we get from our customers. A member of our dev team may or may not reach out to you here to ask for more detail. Thank you for helping to make WF great.

    Thanks, stay healthy, and stay safe!

    This is really unfortunate that they have not given priority to translating the product, I understand that they might be a small team, but other complex plugins by even smaller developers have it available in their products.

    I don’t understand why a basic solution is so hard implement.

    By the way @mikkelcrunch do you know what is it that people exactly do when they modify wfLockedOut.php and wf503.php as a workaround?
    I have modified both files but all messages still come up in English.


    Plugin Author WFSupport


    Actually as I mentioned in my reply, we have been steadily making the necessary changes and additions to be ready to translate the plugin. I understand this is important to you and many others, however researching threats and making sure sites stay safe is, and will always be, our top priority. It doesn’t mean that we won’t be doing this, it just means that I can’t tell you when it will be completed. I’m sorry that answer isn’t satisfactory, @realact, but it is the truth.

    Every time someone asks for a feature it gets noted in internal cases if there is one, or a case is created if there is not. Translations do have an internal ticket (FB761) and I have also added this post as well. I completely understand if this is a deal breaker for you and you want to change from our plugin that is provided freely to you to another because of the lack of translations. That is your right and we wish you the best with whatever security solution you choose going forward.


    @wfsupport First off, we do appreciate whatever work you have been doing towards Internationalization, I never said otherwise, however, the answer cannot be satisfactory because unfortunately, your actions are still not a solution to our problem. I appreciate that you are working towards that goal, but your progress has been a little slow, don’t you think?

    I have used WordFence for years and will continue to do so. I use it in several sites, not all of those sites are intended for a Spanish speaking audience, so no harm is done there, and the site where a Spanish translation is needed is a Linux help community, however, if it was a professional company I would be forced to use another product simply because error messages in a foreign language is not something professional.

    My criticism is intended to be constructive, I love your product. BTW I’m no free costumer, I have purchased a license for $99 a year, so yeah, both to support you guys and because I love WordFence, enough said 🙂

    Thread Starter MikkelCrunch



    yes I can’t add anything to that. Neither to Eli nor to wfsupport.

    The plugin is a really good one, but in truth, taking over 3 years to make one or two error messages translatable is not an outstanding achievement. As another user wrote, it doesn’t even have to be a different language in the backend, just the error messages so that the viewer of the website understands what just went wrong.
    We’re also developing plugins and know how it works.

    Localization in WordPress is not new. And if it works with another plugin, such as LocoTranslate – String translations, this problem would be solved.

    When I read between the lines, you don’t really see the need for a solution.
    You most likely have English speaking users.
    So you can live with it if a few users cannot use your plugin.

    I think that ends this topic.

    Everyone who reads this should be said:
    This plugin displays English error messages only and are not translatable.

    Thread Starter MikkelCrunch



    without making a recommendation.

    We change this file after every update, of course check before whether something has changed.

    It works for us. We cannot say whether it is the same with someone else.

    The File: wordfence/lib/wfLockedOut.php

    if (!defined('WORDFENCE_VERSION')) { exit; }
    header('HTTP/1.1 503 Service Temporarily Unavailable');
    header('Status: 503 Service Temporarily Unavailable');
    <!DOCTYPE html>
    	<title>// OUR OWN TITLE</title>
    	<style>// OUR OWN STYLES</style>
       // The actual translated Text
    <?php exit(); ?>

    Thats it.


    @mikkelcrunch thanks,

    Do you add that code in addition to the existing code or do you actually remove everything on that file and replace it with the code above?


    Thread Starter MikkelCrunch



    I remove everything else. This is the whole file.


    @mikkelcrunch thanks for your reply, I will try this.

    Wordfence is a great plugin!

    And it is actually ready for us to translate to many languages. The messages are already using I10n functions. The pot file is easily created with poEdit and translate the messages and saved them in mo files.

    The only thing missing in this plugin is to load the texdomain (once the mo translation files are ready).

    This is the way I do it.

    Because I do not want to edit Wordfence every time they update the plugin, I load the textdomain for WordFence in my own plugin like this:

    /* Translate Wordfence plugin */
    // Added by Horacio Figarella
    add_action( 'init', 'Translate_Wordfence' );
    function Translate_Wordfence() {
    $browser_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); // Get the browser language
    switch ($browser_lang){											// Set language independently of the country version
    	case "es": $locale = 'es_ES'; break; case "fr": $locale = 'fr_FR'; break; case "it": $locale = 'it_IT'; break; case "pt": $locale = 'pt_BR'; break; case "co": $locale = 'co'; break; default: $locale = 'en_US';
    }	// and set it to one of these 6 languages of this site
    $domain = 'wordfence';		// Domain 1
    $mofile = $domain . '-' . $locale . '.mo';  // Contains all translation for all 3 domains
    unload_textdomain( $domain );
    load_textdomain( $domain, WP_LANG_DIR . '/plugins/' . $mofile );
    $domain = 'wordfence-2fa';  // Domain 2
    //$mofile = $domain . '-' . $locale . '.mo'; // Not needed
    unload_textdomain( $domain );
    load_textdomain( $domain, WP_LANG_DIR . '/plugins/' . $mofile );
    $domain = 'wordfence-ls';  // Domain 3
    //$mofile = $domain . '-' . $locale . '.mo';   // Not needed
    unload_textdomain( $domain );
    load_textdomain( $domain, WP_LANG_DIR . '/plugins/' . $mofile );

    Eventually the plugin developers will integrate a version on this code in their plugin with support for more languages. I am only interested in 6.

    I may understand what Tim says above because they are too busy making the plugin that good.

    But it really does not take much time to make a plugin translatable. All is needed is to add 2 words to every text to be output.

    __( ‘text to be output’, ‘domain’ ) when you want the text translated but not echoed and _e( ‘text to be output’, ‘domain’ ) otherwise.

    The advantage of translation, Tim, is to the client, the final user.

    This message on the screen:

    “Email verification invalid or expired. Please try again.”

    You know what it means, I do too, but this person in another country visiting my web site which is all in his/her language and this message pops up in English makes it difficult for them to understand what we want them to do.

    Yeah, they can use a machine translator. But I prefer to say exactly what I want, and not to depend on another translator. ¿Entiendes lo que digo?


    • This reply was modified 9 months, 4 weeks ago by Horacio.

    One challenge that I have found out with my own plugins is the fact that any variable to be used by Ajax has to be passed to it by POST.

    Wordfence translations may be loaded and working fine but when you make that Ajax call, the output does not translate.

    Here is my solution. You make the Ajax callback load the translation again when it runs.
    For that I had to add some code to Wordfence plugin. Fox example:


    	public function _ajax_authenticate_callback() {
    		// Added by Horacio to translate messages in user's browser language [Begin]
    		$browser_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); // Get the browser language
    		switch ($browser_lang){											// Set language independently of the country version
    			case "es": $locale = 'es_ES'; break; case "fr": $locale = 'fr_FR'; break; case "it": $locale = 'it_IT'; break; case "pt": $locale = 'pt_BR'; break; case "co": $locale = 'co'; break; default: $locale = 'en_US';
    		}	// and set it to one of these 6 languages of this site
    		$domain = 'wordfence';
    		$mofile = $domain . '-' . $locale . '.mo';
    		unload_textdomain( $domain );
    		load_textdomain( $domain, WP_LANG_DIR . '/plugins/' . $mofile );
    		// Added by Horacio to translate messages in user's language [End]
    		if (!isset($_POST['log']) || !is_string($_POST['log']) || empty($_POST['log']) || !isset($_POST['pwd']) || !is_string($_POST['pwd']) || empty($_POST['pwd'])) {
    			self::send_json(array('error' => sprintf(__('<strong>ERROR</strong>: A username and password must be provided. <a href="%s" title="Password Lost and Found">Lost your password</a>?'), wp_lostpassword_url())));

    Again, eventually Wordfence developers will integrate a version of my solution to the plugin and we all are going to be happy; right guys?

    And by the way, I say this issue is NOT resolved until all of us are translating this plugin without having to edit the core every time the plugin is updated!

Viewing 13 replies - 1 through 13 (of 13 total)
  • The topic ‘Old but still neccessary – Translation “Option” for Wordfence’ is closed to new replies.