DetectPrematurelyTranslatedStrings.php
3.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?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;
}
}