PluginProbe
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets / 3.0.0
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets v3.0.0
4.9.5 4.9.4 4.9.3 4.9.2 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 All 85 releases
shopengine / core / multi-language / language.php
language.php
186 lines 6.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 if ( is_admin() && isset( $_REQUEST['page'] ) && $_REQUEST['page'] === 'mlang_strings' ) {
38 $strings = get_option( 'shopengine_module_strings' );
39 if ( $strings ) {
40 $strings = unserialize( $strings );
41 foreach ( $strings as $key => $string ) {
42 pll_register_string( $key, $string, self::CONTEXT );
43 }
44 }
45 }
46 }
47
48 /**
49 * @param $code
50 * @return mixed
51 */
52 public function set_language_code()
53 {
54 // WPML Support
55 if ( is_plugin_active( 'sitepress-multilingual-cms/sitepress.php' ) ) {
56 self::$language_code = apply_filters( 'wpml_current_language', 'en' );
57 self::$translator = 'wpml';
58 //Polylang Support
59 } elseif ( function_exists( 'pll_current_language' ) ) {
60 self::$language_code = pll_current_language();
61 self::$translator = 'polylang';
62 }
63 }
64
65 /**
66 * @param string $language_code
67 * @return mixed
68 */
69 public function get_language_code( string $language_code = '' )
70 {
71 if ( self::$language_code ) {
72 return self::$language_code;
73 }
74 return $language_code;
75 }
76
77 /**
78 * @param $args
79 */
80 public function create_language_strings( $args )
81 {
82 if ( self::$translator ) {
83 $modules = Module_List::instance()->get_list( true, 'unfiltered' );
84
85 $strings = [];
86
87 foreach ( $modules as $module_key => $module ) {
88 if ( !empty( $module['settings'] ) ) {
89 $settings = $module['settings'];
90
91 foreach ( $settings as $setting_key => $setting ) {
92 $field_settings = $setting['field_settings'];
93
94 if ( $field_settings['type'] === 'repeater' ) {
95 $repeater_fields = $field_settings['fields'];
96
97 foreach ( $repeater_fields as $key => $field ) {
98 if ( isset( $field['translate_able'] ) && $field['translate_able'] === true ) {
99 $repeater_value_items = $args['modules'][$module_key]['settings'][$setting_key]['value'];
100
101 foreach ( $repeater_value_items as $repeater_values ) {
102 if ( !empty( $repeater_values[$key] ) ) {
103 if ( !empty( $repeater_values['_uid'] ) ) {
104 $name = $module_key . '__' . $setting_key . '__' . $key . '__' . $repeater_values['_uid'];
105 $strings[$name] = $repeater_values[$key];
106
107 $this->save_string_in_wpml( $name, $repeater_values[$key] );
108 }
109 }
110 }
111 }
112 }
113 } else {
114 if ( isset( $setting['translate_able'] ) && $setting['translate_able'] === true ) {
115 $value = $args['modules'][$module_key]['settings'][$setting_key]['value'];
116 if ( !empty( $value ) ) {
117 $name = $module_key . '__' . $setting_key;
118 $strings[$name] = $value;
119
120 $this->save_string_in_wpml( $name, $value );
121 }
122 }
123 }
124 }
125 }
126 }
127
128 update_option( 'shopengine_module_strings', serialize( $strings ) );
129 }
130 }
131
132 /**
133 * @param $name
134 * @param $value
135 */
136 public function save_string_in_wpml( string $name, string $value )
137 {
138 if ( 'wpml' === self::$translator ) {
139 do_action( 'wpml_register_single_string', self::CONTEXT, $name, $value );
140 }
141 }
142
143 /**
144 * @param array $args
145 * @return mixed
146 */
147 public function multi_language( array $args )
148 {
149 $languages = [];
150
151 // WPML Support
152 if ( is_plugin_active( 'sitepress-multilingual-cms/sitepress.php' ) ) {
153 foreach ( apply_filters( 'wpml_active_languages', [] ) as $language_code => $language ) {
154 $languages[$language_code] = [
155 'language_code' => $language_code,
156 'translated_name' => $language['translated_name'],
157 'country_flag_url' => $language['country_flag_url']
158 ];
159 }
160 $args['status'] = true;
161 $args['lang_items'] = $languages;
162
163 return $args;
164 }
165
166 // Polylang Support
167 if ( function_exists( 'pll_the_languages' ) ) {
168 try {
169 $pll_languages = pll_the_languages( ['raw' => 1] );
170 if ( is_array( $pll_languages ) ) {
171 foreach ( $pll_languages as $language_code => $language ) {
172 $languages[$language_code] = [
173 'language_code' => $language_code,
174 'translated_name' => $language['name'],
175 'country_flag_url' => $language['flag']
176 ];
177 }
178 $args['status'] = true;
179 $args['lang_items'] = $languages;
180 }
181 } catch ( \Throwable $th ) {}
182 }
183 return $args;
184 }
185 }
186