wordpress-turnstile

Wordpress paywall plugin
Log | Files | Refs | README | LICENSE

commit f76f4029161563a66c2cce265b9c9dac9730b20d
parent 069f7fab5e8b1c86c448e571428f2a658f0c769d
Author: Christian Grothoff <christian@grothoff.org>
Date:   Sun,  2 Nov 2025 14:10:20 +0100

improve logic to build description_i18n array

Diffstat:
Mincludes/class-field-manager.php | 2+-
Mincludes/class-price-category.php | 4++--
Mincludes/class-taler-merchant-api.php | 100+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
3 files changed, 98 insertions(+), 8 deletions(-)

diff --git a/includes/class-field-manager.php b/includes/class-field-manager.php @@ -37,7 +37,7 @@ class Taler_Field_Manager { add_action('add_meta_boxes', function() use ($post_type) { add_meta_box( 'taler_turnstile_price_category', - __('Taler Price Category', 'taler-turnstile'), + __('Taler Turnstile Price Category', 'taler-turnstile'), array('Taler_Field_Manager', 'render_price_category_meta_box'), $post_type, 'side', diff --git a/includes/class-price-category.php b/includes/class-price-category.php @@ -23,7 +23,7 @@ class Taler_Price_Category { */ public static function get($id) { $categories = self::get_all(); - return isset($categories[$id]) ? $categories[$id] : null; + return $categories[$id] ?? null; } /** @@ -60,7 +60,7 @@ class Taler_Price_Category { foreach ($prices as $token_family_slug => $currency_map) { foreach ($currency_map as $currency_code => $price) { - if (is_numeric($price) && floatval($price) == 0.0) { + if (is_numeric($price) && floatval($price) <= 0.0) { $subscriptions[] = $token_family_slug; break; } diff --git a/includes/class-taler-merchant-api.php b/includes/class-taler-merchant-api.php @@ -550,20 +550,110 @@ class Taler_Merchant_API { } } + /** * Build a translation map for all enabled languages * + * Detects available multilingual plugins and generates translations accordingly. + * Supports: WPML, Polylang, TranslatePress, qTranslate-XT + * * @param string $string The translatable string * @return array Map of language codes to translated strings */ private static function build_translation_map($string) { - // WordPress doesn't have built-in multi-language support like Drupal - // This would need to be extended with WPML or Polylang integration - return array( - 'en' => $string - ); + $translations = array(); + + // Detect and use WPML (WordPress Multilingual Plugin) + if (defined('ICL_LANGUAGE_CODE') && function_exists('icl_translate')) { + global $sitepress; + + if ($sitepress) { + $active_languages = $sitepress->get_active_languages(); + + foreach ($active_languages as $lang_code => $lang_data) { + // Register string if not already registered + do_action('wpml_register_single_string', 'taler-turnstile', 'subscription_description', $string); + + // Get translation + $translated = apply_filters('wpml_translate_single_string', $string, 'taler-turnstile', 'subscription_description', $lang_code); + $translations[$lang_code] = $translated; + } + + return $translations; + } + } + + // Detect and use Polylang + if (function_exists('pll_languages_list') && function_exists('pll_translate_string')) { + $languages = pll_languages_list(); + + foreach ($languages as $lang_code) { + // Register string for translation + pll_register_string('subscription_description', $string, 'taler-turnstile'); + + // Get translation + $translated = pll_translate_string($string, $lang_code); + $translations[$lang_code] = $translated; + } + + return $translations; + } + + // Detect and use TranslatePress + if (class_exists('TRP_Translate_Press')) { + global $TRP_LANGUAGE; + + $trp = TRP_Translate_Press::get_trp_instance(); + $settings = $trp->get_component('settings'); + + if ($settings) { + $trp_settings = $settings->get_settings(); + $languages = isset($trp_settings['publish-languages']) ? $trp_settings['publish-languages'] : array(); + + $trp_query = $trp->get_component('query'); + + foreach ($languages as $lang_code) { + // Get translation from TranslatePress database + $translated = $trp_query->get_existing_translation( + array( + 'original' => $string, + 'language' => $lang_code + ) + ); + + $translations[$lang_code] = !empty($translated) ? $translated : $string; + } + + return $translations; + } + } + + // Detect and use qTranslate-XT (or qTranslate-X) + if (function_exists('qtranxf_getLanguage') && function_exists('qtranxf_getEnabledLanguages')) { + $languages = qtranxf_getEnabledLanguages(); + + foreach ($languages as $lang_code) { + // qTranslate uses quicktags format [:en]text[:de]text + // For dynamic strings, we'll use the string as-is for all languages + // unless it's already in quicktag format + if (preg_match('/\[:.+\]/', $string)) { + $translated = qtranxf_use($lang_code, $string); + } else { + $translated = $string; + } + + $translations[$lang_code] = $translated; + } + + return $translations; + } + + // Fallback: No multilingual plugin detected + // Return English only + return array('en' => $string); } + /** * Generate a hashed session identifier for payment tracking *