Files
doitinpoland.com/wp-content/plugins/wpml-string-translation/classes/MO/Hooks/DetectPrematurelyTranslatedStrings.php
2023-09-12 21:41:04 +02:00

125 lines
3.1 KiB
PHP

<?php
namespace WPML\ST\MO\Hooks;
use WPML\ST\Gettext\Settings;
class DetectPrematurelyTranslatedStrings implements \IWPML_Action {
/** @var string[] */
private $domains = [];
/** @var string[] */
private $preloadedDomains = [];
/** @var \SitePress */
private $sitepress;
/** @var Settings */
private $gettextHooksSettings;
/**
* @param \SitePress $sitepress
*/
public function __construct( \SitePress $sitepress, Settings $settings ) {
$this->sitepress = $sitepress;
$this->gettextHooksSettings = $settings;
}
/**
* Init gettext hooks.
*/
public function add_hooks() {
if ( $this->gettextHooksSettings->isAutoRegistrationEnabled() ) {
$domains = $this->sitepress->get_setting( 'gettext_theme_domain_name' );
$this->preloadedDomains = array_filter( array_map( 'trim', explode( ',', $domains ) ) );
add_filter( 'gettext', [ $this, 'gettext_filter' ], 9, 3 );
add_filter( 'gettext_with_context', [ $this, 'gettext_with_context_filter' ], 1, 4 );
add_filter( 'ngettext', [ $this, 'ngettext_filter' ], 9, 5 );
add_filter( 'ngettext_with_context', [ $this, 'ngettext_with_context_filter' ], 9, 6 );
add_filter( 'override_load_textdomain', [ $this, 'registerDomainToPreloading' ], 10, 2 );
}
}
/**
* @param string $translation
* @param string $text
* @param string|array $domain
*
* @return string
*/
public function gettext_filter( $translation, $text, $domain ) {
$this->registerDomain( $domain );
return $translation;
}
/**
* @param string $translation
* @param string $text
* @param string $context
* @param string $domain
*
* @return string
*/
public function gettext_with_context_filter( $translation, $text, $context, $domain ) {
$this->registerDomain( $domain );
return $translation;
}
/**
* @param string $translation
* @param string $single
* @param string $plural
* @param string $number
* @param string|array $domain
*
* @return string
*/
public function ngettext_filter( $translation, $single, $plural, $number, $domain ) {
$this->registerDomain( $domain );
return $translation;
}
/**
* @param string $translation
* @param string $single
* @param string $plural
* @param string $number
* @param string $context
* @param string $domain
*
* @return string
*
*/
public function ngettext_with_context_filter( $translation, $single, $plural, $number, $context, $domain ) {
$this->registerDomain( $domain );
return $translation;
}
private function registerDomain( $domain ) {
if ( ! in_array( $domain, $this->preloadedDomains ) ) {
$this->domains[ $domain ] = true;
}
}
public function registerDomainToPreloading( $plugin_override, $domain ) {
if ( array_key_exists( $domain, $this->domains ) && ! in_array( $domain, $this->preloadedDomains, true ) ) {
$this->preloadedDomains[] = $domain;
$this->sitepress->set_setting(
'gettext_theme_domain_name',
implode( ',', array_unique( $this->preloadedDomains ) )
);
$this->sitepress->save_settings();
}
return $plugin_override;
}
}