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:
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
*