screen->get_single_prefixes(); $all_keys = []; foreach ($prefixes as $prefix) { if ( $prefix === 'single_blog_post' || $prefix === 'single_page' ) { continue; } $related_label = blocksy_get_theme_mod( $prefix . '_related_label', '__empty__' ); if ($related_label === '__empty__') { continue; } $all_keys[$prefix . '_related_label'] = 1; } if (empty($all_keys)) { return; } new PLL_Translate_Option('theme_mods_blocksy', $all_keys); new PLL_Translate_Option('theme_mods_blocksy-child', $all_keys); blocksy_manager()->db->wipe_cache(); } ); } public function get_all_translation_keys() { $builder_keys = Blocksy_Manager::instance()->builder->translation_keys(); foreach (['blog', 'categories', 'search', 'author'] as $prefix) { $archive_order = blocksy_get_theme_mod($prefix . '_archive_order', null); if (! $archive_order) { continue; } foreach ($archive_order as $single_archive_component) { if ($single_archive_component['id'] !== 'read_more') { continue; } if (blocksy_akg('read_more_text', $single_archive_component)) { $builder_keys[] = [ 'key' => $prefix . '_archive_read_more_text', 'value' => blocksy_akg( 'read_more_text', $single_archive_component ) ]; } } } foreach (['blog', 'single_blog_post', 'single_page'] as $prefix) { $hero_elements = blocksy_get_theme_mod($prefix . '_hero_elements', null); if (! $hero_elements) { continue; } foreach ($hero_elements as $single_hero_component) { if ( $single_hero_component['id'] === 'custom_meta' && is_array($single_hero_component['meta_elements']) ) { foreach ($single_hero_component['meta_elements'] as $single_meta_element) { if (empty($single_meta_element['label'])) { continue; } $builder_keys[] = [ 'key' => $prefix . '_hero_meta_' . $single_meta_element['id'] . '_label', 'value' => $single_meta_element['label'] ]; } } if ( $single_hero_component['id'] === 'custom_title' && blocksy_akg('title', $single_hero_component) ) { $builder_keys[] = [ 'key' => $prefix . '_hero_custom_title', 'value' => blocksy_akg('title', $single_hero_component) ]; } if ( $single_hero_component['id'] === 'custom_description' && blocksy_akg('description', $single_hero_component) ) { $builder_keys[] = [ 'key' => $prefix . '_hero_custom_description', 'value' => blocksy_akg('description', $single_hero_component) ]; } } } return apply_filters( 'blocksy:translations-manager:all-translation-keys', $builder_keys ); } public function register_translation_keys() { if (! function_exists('pll_register_string')) { return; } $builder_keys = $this->get_all_translation_keys(); foreach ($builder_keys as $single_key) { if (! is_string($single_key['value'])) { continue; } pll_register_string( $single_key['key'], $single_key['value'], 'Blocksy', isset($single_key['multiline']) ? $single_key['multiline'] : false ); } } public function register_wpml_translation_keys() { if (! function_exists('icl_object_id')) { return; } $builder_keys = $this->get_all_translation_keys(); foreach ($builder_keys as $single_key) { if (! is_string($single_key['value'])) { continue; } do_action( 'wpml_register_single_string', 'Blocksy', $single_key['key'], $single_key['value'] ); } } } if (! function_exists('blocksy_get_all_i18n_languages')) { function blocksy_get_all_i18n_languages() { $result = []; if (function_exists('pll_languages_list')) { $locales = pll_languages_list(['fields' => '']); foreach ($locales as $locale) { $result[] = [ 'id' => $locale->locale, 'name' => $locale->name ]; } } if ( ! function_exists('pll_languages_list') && function_exists('icl_get_languages') ) { $locales = icl_get_languages(); foreach ($locales as $locale_key => $locale) { $result[] = [ 'id' => $locale['default_locale'], 'name' => $locale['native_name'] ]; } } if (class_exists('TRP_Translate_Press')) { $settings = new TRP_Settings(); $settings_array = $settings->get_settings(); $trp = TRP_Translate_Press::get_trp_instance(); $trp_languages = $trp->get_component('languages'); if (current_user_can(apply_filters( 'trp_translating_capability', 'manage_options' ))) { $languages_to_display = $settings_array['translation-languages']; } else { $languages_to_display = $settings_array['publish-languages']; } $languages_info = $trp_languages->get_language_names( $languages_to_display ); foreach ($languages_to_display as $code) { $result[] = [ 'id' => $code, 'name' => $languages_info[$code] ]; } } if (function_exists('weglot_get_current_language')) { $languages_available = array_values((array)weglot_get_languages_available())[0]; $original_language = weglot_get_original_language(); $destination_languages = array_map(function ($object) { return $object['language_to']; }, weglot_get_destination_languages()); $languages_to_display = array_merge(array($original_language), $destination_languages); foreach ($languages_to_display as $code) { $result[] = [ 'id' => $languages_available[$code]->getExternalCode(), 'name' => $languages_available[$code]->getLocalName() ]; } } return $result; } } if (! function_exists('blocksy_get_current_language')) { function blocksy_get_current_language($format = 'locale') { if ($format === 'slug') { if (function_exists('pll_current_language')) { return pll_current_language(); } return '__NOT_KNOWN__'; } if (function_exists('pll_current_language')) { return pll_current_language('locale'); } if ( function_exists('icl_get_languages') && defined('ICL_LANGUAGE_CODE') && isset(icl_get_languages()[ICL_LANGUAGE_CODE]) ) { return icl_get_languages()[ICL_LANGUAGE_CODE]['default_locale']; } global $TRP_LANGUAGE; if ( class_exists('TRP_Translate_Press') && isset($TRP_LANGUAGE) ) { return $TRP_LANGUAGE; } if (function_exists('weglot_get_current_language')) { return weglot_get_current_language(); } return '__NOT_KNOWN__'; } } if (! function_exists('blocksy_translate_dynamic')) { function blocksy_translate_dynamic($text, $key = null) { if (function_exists('pll__')) { return pll__($text); // PHPCS:ignore WordPress.WP.I18n } if ($key) { return apply_filters( 'wpml_translate_single_string', $text, 'Blocksy', $key ); } return $text; } } function blocksy_safe_sprintf($format, ...$args) { $result = $format; $is_error = false; // vsprintf() triggers a warning on PHP < 8 and throws an exception on PHP 8+ // We need to handle both. // https://www.php.net/manual/en/function.vsprintf.php#refsect1-function.vsprintf-errors set_error_handler(function () use (&$is_error) { $is_error = true; }); if (interface_exists('Throwable')) { try { $result = vsprintf($format, $args); } catch (\Throwable $e) { $is_error = true; } } else { $result = vsprintf($format, $args); } restore_error_handler(); if ($is_error) { // TODO: maybe cleanup format from %s, %d, etc return $format; } return $result; }