$item ) { if ( $item[2] == 'edit.php?post_type=popup' ) { $menu[ $key ][0] .= $count ? ' ' : ''; } } } /** * @param array $alerts * * @return array */ public static function translation_request( $alerts = array() ) { $version = explode( '.', Popup_Maker::$VER ); // Get only the major.minor version exclude the point releases. $version = $version[0] . '.' . $version[1]; $code = 'translation_request_' . $version; // Bail Early if they have already dismissed. if ( self::has_dismissed_alert( $code ) ) { return $alerts; } // Get locales based on the HTTP accept language header. $locales_from_header = PUM_Utils_I10n::get_http_locales(); // Abort early if no locales in header. if ( empty( $locales_from_header ) ) { return $alerts; } // Get acceptable non EN WordPress locales based on the HTTP accept language header. // Used when the current locale is EN only I believe. $non_en_locales_from_header = PUM_Utils_I10n::get_non_en_accepted_wp_locales_from_header(); // If no additional languages are supported abort if ( empty( $non_en_locales_from_header ) ) { return $alerts; } /** * Assume all at this point are possible polyglots. * * Viewing in English! * -- Translation available in one additional language! * ---- Show notice that there other language is available and we need help translating. * -- Translation available in more than one language! * ---- Show notice that their other languages are available and need help translating. * -- Translation not available! * ---- Show notice that plugin is not translated and we need help. * Else If translation for their language(s) exists, but isn't up to date! * -- Show notice that their language is available, but out of date and need help translating. * Else If translations for their language doesn't exist! * -- Show notice that plugin is not translated and we need help. */ $current_locale = function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale(); // Get the active language packs of the plugin. $translation_status = PUM_Utils_I10n::translation_status(); // Retrieve all the WordPress locales in which the plugin is translated. $locales_with_translations = wp_list_pluck( $translation_status, 'language' ); $locale_translation_versions = wp_list_pluck( $translation_status, 'version' ); // Suggests existing langpacks $suggested_locales_with_langpack = array_values( array_intersect( $non_en_locales_from_header, $locales_with_translations ) ); $current_locale_is_suggested = in_array( $current_locale, $suggested_locales_with_langpack ); $current_locale_is_translated = in_array( $current_locale, $locales_with_translations ); // Last chance to abort early before querying all available languages. // We abort here if the user is already using a translated language that is up to date! if ( $current_locale_is_suggested && $current_locale_is_translated && version_compare( $locale_translation_versions[ $current_locale ], Popup_Maker::$VER, '>=' ) ) { return $alerts; } // Retrieve all the WordPress locales. $locales_supported_by_wordpress = PUM_Utils_I10n::available_locales(); // Get the native language names of the locales. $suggest_translated_locale_names = array(); foreach ( $suggested_locales_with_langpack as $locale ) { $suggest_translated_locale_names[ $locale ] = $locales_supported_by_wordpress[ $locale ]['native_name']; } $suggest_string = ''; // If we get this far, they clearly have multiple language available // If current locale is english but they have others available, they are likely polyglots. $currently_in_english = strpos( $current_locale, 'en' ) === 0; // Currently in English. if ( $currently_in_english ) { // Only one locale suggestion. if ( 1 === count( $suggest_translated_locale_names ) ) { $language = current( $suggest_translated_locale_names ); $suggest_string = sprintf( /* translators: %s: native language name. */ __( 'This plugin is also available in %1$s. Help improve the translation!', 'popup-maker' ), $language, esc_url( 'https://translate.wordpress.org/projects/wp-plugins/popup-maker' ) ); // Multiple locale suggestions. } elseif ( ! empty( $suggest_translated_locale_names ) ) { $primary_language = current( $suggest_translated_locale_names ); array_shift( $suggest_translated_locale_names ); $other_suggest = ''; foreach ( $suggest_translated_locale_names as $language ) { $other_suggest .= $language . ', '; } $suggest_string = sprintf( /* translators: 1: native language name, 2: other native language names, comma separated */ __( 'This plugin is also available in %1$s (also: %2$s). Help improve the translation!', 'popup-maker' ), $primary_language, trim( $other_suggest, ' ,' ), esc_url( 'https://translate.wordpress.org/projects/wp-plugins/popup-maker' ) ); // Non-English locale in header, no translations. } elseif ( ! empty( $non_en_locales_from_header ) ) { if ( 1 === count( $non_en_locales_from_header ) ) { $locale = reset( $non_en_locales_from_header ); $suggest_string = sprintf( /* translators: 1: native language name, 2: URL to translate.wordpress.org */ __( 'This plugin is not translated into %1$s yet. Help translate it!', 'popup-maker' ), $locales_supported_by_wordpress[ $locale ]['native_name'], esc_url( 'https://translate.wordpress.org/projects/wp-plugins/popup-maker' ) ); } else { $primary_locale = reset( $non_en_locales_from_header ); $primary_language = $locales_supported_by_wordpress[ $primary_locale ]['native_name']; array_shift( $non_en_locales_from_header ); $other_suggest = ''; foreach ( $non_en_locales_from_header as $locale ) { $other_suggest .= $locales_supported_by_wordpress[ $locale ]['native_name'] . ', '; } $suggest_string = sprintf( /* translators: 1: native language name, 2: other native language names, comma separated */ __( 'This plugin is also available in %1$s (also: %2$s). Help improve the translation!', 'popup-maker' ), $primary_language, trim( $other_suggest, ' ,' ), esc_url( 'https://translate.wordpress.org/projects/wp-plugins/popup-maker' ) ); } } // The plugin has no translation for the current locale. } elseif ( ! $current_locale_is_suggested && ! $current_locale_is_translated ) { $suggest_string = sprintf( __( 'This plugin is not translated into %1$s yet. Help translate it!', 'popup-maker' ), $locales_supported_by_wordpress[ $current_locale ]['native_name'], esc_url( 'https://translate.wordpress.org/projects/wp-plugins/popup-maker' ) ); // The plugin has translations for current locale, but they are out of date. } elseif ( $current_locale_is_suggested && $current_locale_is_translated && version_compare( $locale_translation_versions[ $current_locale ], Popup_Maker::$VER, '<' ) ) { $suggest_string = sprintf( /* translators: %s: native language name. */ __( 'This plugin\'s translation for %1$s is out of date. Help improve the translation!', 'popup-maker' ), $locales_supported_by_wordpress[ $current_locale ]['native_name'], esc_url( 'https://translate.wordpress.org/projects/wp-plugins/popup-maker' ) ); } if ( ! empty( $suggest_string ) ) { $alerts[] = array( 'code' => $code, 'message' => $suggest_string, 'type' => 'info', ); } return $alerts; } /** * @param array $alerts * * @return array */ public static function whats_new_alerts( $alerts = array() ) { $upgraded_from = PUM_Utils_Upgrades::$upgraded_from; if ( version_compare( $upgraded_from, '0.0.0', '>' ) ) { if ( version_compare( $upgraded_from, '1.8.0', '<' ) ) { $alerts[] = array( 'code' => 'whats_new_1_8_0', 'type' => 'success', 'message' => sprintf( '' . __( 'See whats new in v%s - (%sview all changes%s)', 'popup-maker' ) . '', '1.8.0', '', '' ), 'html' => "