Plugins and themes hosted on WordPress.org are, as of December 5th(-ish) 2015, translateable through translate.wordpress.org.
This opens up for a lot of interesting new interactions for existing, and potential new users, who may not be fluent in English, and have not yet picked up your plugin or theme for this reason alone.
So, your plugin is now up there, it can be translated…but how do you encourage your users to participate and translate the plugin?
I threw together a snippet for just this purpose, it may not be for everyone, but I do believe it’s a fairly safe starting point for most people.
<?php
function language_detector_admin_notices() {
// Get the current language locale
$language = get_locale();
// Check if the nag screen has been disabled for this language
if ( false === get_option( 'plugin_slug_language_detector_' . $language, false ) ) {
// Check if a translation file already exists for this language
if ( $loaded = load_plugin_textdomain( 'text_domain', false, plugin_dir_path( __FILE__ ) . '/languages/' ) ) {
// If a translation file is discovered, we disable all future nag screens for this language
update_option( 'plugin_slug_language_detector_' . $language, true, true );
return;
}
// We need the translation data from core to display human readable locale names
require_once( ABSPATH . 'wp-admin/includes/translation-install.php' );
$translations = wp_get_available_translations();
// Gather information about the plugin (in this case we really only watn the name and text domain/slug)
$plugin = get_plugin_data( __FILE__ );
printf(
'<div class="notice notice-info"><p><strong>%s</strong></p><p>%s</p></div>',
esc_html( $plugin['Name'] ),
sprintf(
__( 'This plugin does not have a translation for <strong>%1$s</strong>, you can help translating the plugin at <a href="%2$s" target="_blank">%2$s</a>.' ),
$translations[ $language ]['native_name'], // The native name of the language currently in use
esc_url( 'https://translate.wordpress.org/projects/wp-plugins/' . $plugin['TextDomain'] ) // The URL to the translation overview page for our plugin
)
);
}
}
// Hook into admin notices
add_action( 'admin_notices', 'language_detector_admin_notices' );
// Output JavaScript for handling dismissals in the footer
function language_detector_admin_footer() {
$language = get_locale();
// We only add our JavaScript if the nag notice is being displayed any way
if ( false === get_option( '$plugin_slug_language_detector_' . $language, false ) ) {
?>
<script type="text/javascript">
jQuery(document).ready(function ($) {
$( ".notice.is-dismissible.language-detect-nag-dismiss" ).on( "click", ".notice-dismiss", function() {
var data = {
action : 'language_nag_dismiss'
};
$.post(
ajaxurl,
data
);
});
});
</script>
<?php
}
}
add_action( 'admin_footer', 'language_detector_admin_footer' );
// Trigger function for when the ajax call goes through
function language_detector_dismiss() {
$language = get_locale();
update_option( '$plugin_slug_language_detector_' . $language, true );
wp_die();
}
add_action( 'wp_ajax_language_nag_dismiss', 'language_detector_dismiss' );
The code requires some minor edits before you use it (technically only one edit is required, the text_domain one);
- $plugin_slug in the get_option and update_option calls should reflect your own plugins slug
- $text_domain needs to match your plugin slug (adn the langauge path ideally, just like your normal textdomain loading function)
The snippet follows the plugin guidelines for nag screens (dismissable and will stay dismissed, yay!), so you can use it as is, or you can modify it (it’s just a way to get the ball rolling really).
Caveats (before you say it’s broken);
- The code must be in your main plugin file, this is due to the get_plugin_data call being used
- The nag screen is per language, so if the user changes their language, they’ll get a new nag screen (possible yay, possible nay?)
- No nag screen is shown if a translation file actually exists for the current language, if so the nag screen is automatically disabled
I also added in text domains to the nag message, this is so you can utilize it even if you decide to remove the disable nag checker, and want to display a translated message to your users, one idea here is to show a “You’ve used this plugin for 1 week, please consider helping with translations” kind of message, or any other approach you feel is valid.
Leave a Reply