PluginProbe ʕ •ᴥ•ʔ
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution / 4.6.4
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution v4.6.4
4.9.1 4.9.0 2.0.0 2.1.0 2.2.0 2.2.1 2.2.2 2.3.0 2.4.0 2.5.0 2.5.1 3.0.0 3.1.0 3.1.1 4.0.0 4.0.1 4.1.0 4.1.1 4.2.0 4.2.1 4.3.0 4.3.1 4.4.0 4.5.0 4.5.1 4.6.0 4.6.1 4.6.2 4.6.3 4.6.4 4.6.5 4.6.6 4.6.7 4.6.8 4.6.9 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.7.6 4.7.7 4.7.8 4.7.9 4.8.0 4.8.1 4.8.2 4.8.3 4.8.4 4.8.5 4.8.6 4.8.7 4.8.8 4.8.9 trunk 0.1.2-beta 0.1.3-beta 0.1.4-beta 1.0.0 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.2.1 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.5.0 1.5.1 1.6.0 1.6.1 1.7.0 1.8.0 1.8.1 1.9.0
shopengine / core / multi-language / language.php
shopengine / core / multi-language Last commit date
language.php 3 years ago
language.php
187 lines
1 <?php
2
3 namespace ShopEngine\Core\MultiLanguage;
4
5 use ShopEngine\Core\Register\Module_List;
6 use ShopEngine\Traits\Singleton;
7
8 class Language
9 {
10 use Singleton;
11
12 /**
13 * @var mixed
14 */
15 public static $language_code;
16 /**
17 * @var mixed
18 */
19 public static $translator;
20
21 const CONTEXT = 'Shopengine Module';
22
23 public function init()
24 {
25 $this->set_language_code();
26
27 add_filter( 'shopengine_language_code', [$this, 'get_language_code'] );
28
29 /**
30 * Fires as an admin screen or script is being initialized.
31 */
32 add_filter( 'shopengine_multi_language', [$this, 'multi_language'] );
33
34 add_action( 'shopengine/core/settings/on_save', [$this, 'create_language_strings'] );
35
36 // Register Module Strings in Polylang
37 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Just checking current page
38 if ( is_admin() && isset( $_REQUEST['page'] ) && $_REQUEST['page'] === 'mlang_strings' ) {
39 $strings = get_option( 'shopengine_module_strings' );
40 if ( $strings ) {
41 $strings = unserialize( $strings );
42 foreach ( $strings as $key => $string ) {
43 pll_register_string( $key, $string, self::CONTEXT );
44 }
45 }
46 }
47 }
48
49 /**
50 * @param $code
51 * @return mixed
52 */
53 public function set_language_code()
54 {
55 // WPML Support
56 if ( is_plugin_active( 'sitepress-multilingual-cms/sitepress.php' ) ) {
57 self::$language_code = apply_filters( 'wpml_current_language', 'en' );
58 self::$translator = 'wpml';
59 //Polylang Support
60 } elseif ( function_exists( 'pll_current_language' ) ) {
61 self::$language_code = pll_current_language();
62 self::$translator = 'polylang';
63 }
64 }
65
66 /**
67 * @param string $language_code
68 * @return mixed
69 */
70 public function get_language_code( string $language_code = '' )
71 {
72 if ( self::$language_code ) {
73 return self::$language_code;
74 }
75 return $language_code;
76 }
77
78 /**
79 * @param $args
80 */
81 public function create_language_strings( $args )
82 {
83 if ( self::$translator ) {
84 $modules = Module_List::instance()->get_list( true, 'unfiltered' );
85
86 $strings = [];
87
88 foreach ( $modules as $module_key => $module ) {
89 if ( !empty( $module['settings'] ) ) {
90 $settings = $module['settings'];
91
92 foreach ( $settings as $setting_key => $setting ) {
93 $field_settings = $setting['field_settings'];
94
95 if ( $field_settings['type'] === 'repeater' ) {
96 $repeater_fields = $field_settings['fields'];
97
98 foreach ( $repeater_fields as $key => $field ) {
99 if ( isset( $field['translate_able'] ) && $field['translate_able'] === true ) {
100 $repeater_value_items = $args['modules'][$module_key]['settings'][$setting_key]['value'];
101
102 foreach ( $repeater_value_items as $repeater_values ) {
103 if ( !empty( $repeater_values[$key] ) ) {
104 if ( !empty( $repeater_values['_uid'] ) ) {
105 $name = $module_key . '__' . $setting_key . '__' . $key . '__' . $repeater_values['_uid'];
106 $strings[$name] = $repeater_values[$key];
107
108 $this->save_string_in_wpml( $name, $repeater_values[$key] );
109 }
110 }
111 }
112 }
113 }
114 } else {
115 if ( isset( $setting['translate_able'] ) && $setting['translate_able'] === true ) {
116 $value = $args['modules'][$module_key]['settings'][$setting_key]['value'];
117 if ( !empty( $value ) ) {
118 $name = $module_key . '__' . $setting_key;
119 $strings[$name] = $value;
120
121 $this->save_string_in_wpml( $name, $value );
122 }
123 }
124 }
125 }
126 }
127 }
128
129 update_option( 'shopengine_module_strings', serialize( $strings ) );
130 }
131 }
132
133 /**
134 * @param $name
135 * @param $value
136 */
137 public function save_string_in_wpml( string $name, string $value )
138 {
139 if ( 'wpml' === self::$translator ) {
140 do_action( 'wpml_register_single_string', self::CONTEXT, $name, $value );
141 }
142 }
143
144 /**
145 * @param array $args
146 * @return mixed
147 */
148 public function multi_language( array $args )
149 {
150 $languages = [];
151
152 // WPML Support
153 if ( is_plugin_active( 'sitepress-multilingual-cms/sitepress.php' ) ) {
154 foreach ( apply_filters( 'wpml_active_languages', [] ) as $language_code => $language ) {
155 $languages[$language_code] = [
156 'language_code' => $language_code,
157 'translated_name' => $language['translated_name'],
158 'country_flag_url' => $language['country_flag_url']
159 ];
160 }
161 $args['status'] = true;
162 $args['lang_items'] = $languages;
163
164 return $args;
165 }
166
167 // Polylang Support
168 if ( function_exists( 'pll_the_languages' ) ) {
169 try {
170 $pll_languages = pll_the_languages( ['raw' => 1] );
171 if ( is_array( $pll_languages ) ) {
172 foreach ( $pll_languages as $language_code => $language ) {
173 $languages[$language_code] = [
174 'language_code' => $language_code,
175 'translated_name' => $language['name'],
176 'country_flag_url' => $language['flag']
177 ];
178 }
179 $args['status'] = true;
180 $args['lang_items'] = $languages;
181 }
182 } catch ( \Throwable $th ) {}
183 }
184 return $args;
185 }
186 }
187