// === Overrides RO globale (gettext) === add_action('init', function () { // Dicționar – editează după nevoi $exact = [ 'Cart' => 'Coș', 'Checkout' => 'Finalizare comandă', 'Add to cart' => 'Adaugă în coș', 'Billing details' => 'Detalii facturare', 'No products in the cart.' => 'Nu sunt produse în coș.', ]; $replace = [ 'Sale' => 'Promoție', 'Coupon' => 'Cupon', 'Order' => 'Comandă', ]; $plural_map = [ 'product|products' => 'produs|produse', ]; // 1) gettext (fără context) add_filter('gettext', function ($translated, $text, $domain) use ($exact, $replace) { if (isset($exact[$text])) { return $exact[$text]; } foreach ($replace as $needle => $ro) { if ($needle === '') continue; $translated = preg_replace('/' . preg_quote($needle, '/') . '/i', $ro, $translated); } return $translated; }, 9999, 3); // 2) gettext cu context (ex. _x()) add_filter('gettext_with_context', function ($translated, $text, $context, $domain) use ($exact, $replace) { $key = $text . '|' . $context; // dacă vrei, poți pune în $exact și chei "Text|Context" if (isset($exact[$key])) { return $exact[$key]; } if (isset($exact[$text])) { return $exact[$text]; } foreach ($replace as $needle => $ro) { if ($needle === '') continue; $translated = preg_replace('/' . preg_quote($needle, '/') . '/i', $ro, $translated); } return $translated; }, 9999, 4); // 3) plurale add_filter('ngettext', function ($translation, $single, $plural, $number, $domain) use ($plural_map, $replace) { $key = $single . '|' . $plural; if (isset($plural_map[$key])) { list($ro_s, $ro_p) = array_pad(explode('|', $plural_map[$key], 2), 2, ''); $out = ($number == 1) ? ($ro_s ?: $translation) : ($ro_p ?: $translation); // aplicăm și înlocuirile simple foreach ($replace as $needle => $ro) { if ($needle === '') continue; $out = preg_replace('/' . preg_quote($needle, '/') . '/i', $ro, $out); } return $out; } // fallback replace foreach ($replace as $needle => $ro) { if ($needle === '') continue; $translation = preg_replace('/' . preg_quote($needle, '/') . '/i', $ro, $translation); } return $translation; }, 9999, 5); }, 20); // === WooCommerce / tema: hook-uri cu prioritate mare === // Buton "Adaugă în coș" – unele teme îl rescriu: setăm prioritate 100 add_filter('woocommerce_product_single_add_to_cart_text', function($text) { return 'Adaugă în coș'; }, 100); // Titlu tab "Descriere" add_filter('woocommerce_product_description_tab_title', function($title) { return 'Descriere'; }, 100); // Titlu tab "Recenzii" add_filter('woocommerce_product_tabs', function($tabs) { if (isset($tabs['reviews']['title'])) { $tabs['reviews']['title'] = 'Recenzii'; } // Unele teme adaugă "About brand" if (isset($tabs['brand_tab']['title'])) { $tabs['brand_tab']['title'] = 'Despre brand'; } return $tabs; }, 100); // Atribute "Greutate" / "Dimensiuni" add_filter('woocommerce_display_product_attributes', function($attrs) { if (isset($attrs['weight']['label'])) { $attrs['weight']['label'] = 'Greutate'; } if (isset($attrs['dimensions']['label'])) { $attrs['dimensions']['label'] = 'Dimensiuni'; } return $attrs; }, 100); // În unele locuri Woo/teme folosesc etichete atribute direct add_filter('woocommerce_attribute_label', function($label, $name, $product) { if ($label === 'Dimensions') return 'Dimensiuni'; if ($label === 'Weight') return 'Greutate'; return $label; }, 100, 3);
Showing all 4 results