Jak doplnit chybějící překlad v GeneratePress šabloně pro WooCommerce košík

V předešlém článku jsme psali o překladu webových aplikací pomocí editoru Poedit. Za standardní situace máte k dispozici .pot nebo .po soubor, ten pomocí editoru Poedit upravíte a překlad umístite na vhodné místo. Jak ale postupovat kdy standardní postup nestačí a jazykový balíček frázi vůbec neobsahuje? Šablona GeneraPress je do češtiny slušně lokalizovaná z více než 90%. Rovněž i její placené rozšíření GeneratePress Premium, které přidáva do šablony další vychytávky, včetně decentní podpory pro plugin WooCommerce.

Toto prémiové rozšíření „provozuje“ ve WooCommerce vysouvací panel, který se ukáže po přidání zboží do košíku. Vysune se z hlavičky a v náhledu je ukázka souhrnu, odkaz na Košík a odkaz na Pokladnu. Panel obsahuje tři anglické menu položky Item added to cart, Continue to shopping, Checkout.

Oprava překladu Wordpress pluginu

Všechny tyto fráze nejsou přeložené ani v případě, že jazykový balíček si GeneratePress automaticky stáhnul. Nad to, minimálně tyto fráze neobsahuje ani soubor gp-preium-cs_CZ.po v cestě

/wp-content/plugins/gp-premium/langs/gp-premium-cs_CZ.po

ani soubor generatepress-cs_CZ.po v cestě

/wp-content/languages/themese/generatepress-cs_CZ.po

Najdeme soubor který obsahuje výraz item a items pomocí grep. On by to byl asi masakr protože výraz item je v hojně zastoupen v samotném kódu. Pomůžeme si vyhledáním další fráze která se objevuje v popup okně po přidání položky do košíku. Konkrétně Continue Shopping nebo Item added to cart. Je pravděpodobné, že budou v kódu u sebe. Prohledáme soubory ve složce /wp-content na fráze Continue Shopping a continue shopping. Fráze je v úvozovkách, grep nevyhledá pouze slovní spojení continue shopping ale pouze continue shopping, né Continue Shopping (case sensitive). Použijeme grep přepínač -i

user@stan:/var/www/web.cz/web# grep -i 'continue shopping' * -d recurse -l /var/www/web126/web/wp-content/

GeneratePress & WooCommerce

Ve výstupe vidíme všechny soubory které obsahují hledanou frázi continue shopping

wp-content/languages/plugins/woocommerce-en_GB.mo
wp-content/languages/plugins/woocommerce-cs_CZ.po
wp-content/languages/plugins/woocommerce-en_GB.po
wp-content/languages/plugins/woocommerce-cs_CZ.mo
/var/www/web126/web/wp-content/plugins/gp-premium/langs/gp-premium-nl_NL.mo
/var/www/web126/web/wp-content/plugins/gp-premium/langs/gp-premium-vi.mo
/var/www/web126/web/wp-content/plugins/gp-premium/langs/gp-premium-it_IT.mo
/var/www/web126/web/wp-content/plugins/gp-premium/langs/gp-premium-ar.mo
/var/www/web126/web/wp-content/plugins/gp-premium/langs/gp-premium-zh_CN.mo
/var/www/web126/web/wp-content/plugins/gp-premium/langs/gp-premium-nb_NO.mo
/var/www/web126/web/wp-content/plugins/gp-premium/langs/gp-premium-fr_FR.mo
/var/www/web126/web/wp-content/plugins/gp-premium/langs/gp-premium-de_DE.mo
/var/www/web126/web/wp-content/plugins/gp-premium/langs/gp-premium-pl_PL.mo
/var/www/web126/web/wp-content/plugins/gp-premium/langs/gp-premium-sv_SE.mo
/var/www/web126/web/wp-content/plugins/gp-premium/langs/gp-premium-ru_RU.mo
/var/www/web126/web/wp-content/plugins/gp-premium/langs/gp-premium-pt_PT.mo
/var/www/web126/web/wp-content/plugins/gp-premium/langs/gp-premium-fi.mo
/var/www/web126/web/wp-content/plugins/gp-premium/langs/gp-premium-es_ES.mo
/var/www/web126/web/wp-content/plugins/gp-premium/langs/gp-premium-pt_BR.mo
/var/www/web126/web/wp-content/plugins/gp-premium/woocommerce/functions/functions.php.save
/var/www/web126/web/wp-content/plugins/gp-premium/woocommerce/functions/functions.php
user@stan:/var/www/web.cz/web/wp-content/#

Jsou v stejnojmenném souboru functions.php (nejedná se ale o functions.php šablony), v cestě:

/wp-content/plugins/generatepress-premium/woocommerce/functions/functions.php

v části kódu

/**
 * Adds a sticky/slide down navigation with add to cart details.
 *
 * @since 1.8
 */

konkrétně na řádku 1309 (zvýrazněno boldem)

						<div class="cart-info">
							<div class="item-added">
								<?php _e( 'Položka přidána do košíku.', 'gp-premium' ); ?>
							</div>

							<div class="cart-data">
								<?php
								if ( isset( WC()->cart ) ) {
									echo sprintf( _n( '%d item', '%d items', WC()->cart->get_cart_contents_count(), 'gp-premium' ), WC()->cart->get_cart_contents_count() ); ?> - <?php echo WC()->cart->get_cart_total();
								}
								?>
							</div>
						</div>

Pokud by překlad nepomohl, výraz item a items se opakuje i na řádku 1407 v části kódu Update cart totals in sticky add to cart panel

/**
 * Update cart totals in sticky add to cart panel.
 *
 * @since 1.8
 */
function generatepress_add_to_cart_panel_fragments( $fragments ) {
	if ( isset( WC()->cart ) ) {
		$fragments['.add-to-cart-panel .cart-data'] = '<div class="cart-data">' . sprintf( _n( '%d item', '%d items', WC()->cart->get_cart_contents_count(), 'gp-premium' ), WC()->cart->get_cart_contents_count() ) . ' - ' .  WC()->cart->get_cart_total() . '</div>';
	}

	return $fragments;
}

Samosebou lze oba výrazy přepsat přímo v php souboru. V případě aktualizace pluginu GeneratePress Premium, kde by (málo pravděpodobné ne ale nemožné) byl aktualizován i přímo takto upravený soubor (functions.php), tato úpravu by byla u aktualizace přepsaná. Prvedeme proto úpravu souboru .po pomocí textového editoru Brackets. I když to tak nevypadá, soubor ve formátu .po je editovatelný. Na konci souboru gp-premium-cs_CZ.po je přibližně tisícovka zakomentovaných přeložených vět. Nekam k začátku konce překladu, třeba nad menu autora vložíme to co se nám nabízi jako logické

msgid "%d item"
msgstr "%d kus"

msgid "%d items"
msgstr "%d ks"

To ale není správný zápis singulár vs plurál. Když zapíšete nový výraz do .po souboru tímto způsobem, Poedit vás i tak upravený souboru nechá vyexportovat do .mo, no na stránce bude přeložené pouze jednotné číslo :) Jelikož se jedná o duplicitu. I tak proto, že řetězec v příkladu obsahuje dva chyby. Tou druhou je absence závorek (). Správně zapsaný nový výraz, včetně množných čísel a správné syntaxe, vypadá takto:

msgid "(%d item)"
msgid_plural "(%d items)"
msgstr[0] "(%d kus)"
msgstr[1] "(%d kusy)"
msgstr[2] "(%d kusů)"

V poedit následně vidíme zobrazený ručně přidaný řetězec item

GeneratePress Poedit chybějící CZ překlad
GeneratePress & Poedit chybějící překlad češtiny

U ostatních výrazů postupujeme obdobně.

1. Prohledáme soubor .po v textovém editoru (s podporou UTF-8ú na (ne)výskyt výrazů které potřebujeme přeložit a neobsahuje je .po nebo .pot soubor který máte k dispozici.
2. Dle výsledku hledání výraz buďto přeložíme nebo přidáme a přeložíme. Třeba u řádku souboru gp-premium-cs_CZ.po č. 2603 se vyskytuje nepřeložený výraz View your shopping cart, pravděpodobně bude ve vztahu ke GeneretaPres WooCommerce mini cart viz

#: woocommerce/functions/functions.php:413
#: woocommerce/functions/functions.php:433
msgid "View your shopping cart"
msgstr ""

Zakomentovaný popisek naznačuje vztah k části šablony s podporu WooCommerce a je pravděpodobné, že to je přímo část pro překlad jedné z dotčených částí – mini cart náhledu.

3. Upravený .po soubor otevřeme v programu Poedit a uložíme. Tím se .po soubor nakompiluje do podstaně menšího .mo souboru
4. Oba soubory nahrajeme do složky ze které je GeneratePress Premium soubor načíst to znamená

/wp-content/plugins/gp-premium/langs/gp-premium-cs_CZ.po
/wp-content/plugins/gp-premium/langs/gp-premium-cs_CZ.mo

Míst kam se ukládají překlady pro WordPress i WooCommerce je několik. Vždy je proto dobré pozorně slededovat odkud překlad stahujete a kam jej nahráváte. V případě, že přeložený soubor nemá na původní text vlyv, jednou z možností proč tomu tak může být jest umístění v nesprávne složce.

WPC Fly Cart pro WooCommerce

V případě, že používáte plugin pro zobrazení košíku, třeba WPC Fly Cart pro WooCommerce funkci AJAX v košíku, kterou integruje WooCommerce můžete vypnout.

Užitečné

Chybějící překlad WordPress.
Úprava SVG ikony GeneratePress
Domovská stránka šablony GeneratePress.
Domovská stránka Poedit.

ICTIS.CZ