In WooCommerce versie 2.0.5 kunnen de vertalingen voor de WordPress beheerdersomgeving ingeladen vanuit een eigen bestand. Op die manier hoeven niet alle WooCommerce vertalingen altijd geladen te worden. In de WooCommerce ‘load_plugin_textdomain’ function is duidelijk te zien hoe dit is opgezet.
Om de vertalingen zo efficiënt mogelijk op te zetten moeten er 2 .PO of .POT bestanden aangemaakt worden. Normaliter scande ik altijd met behulp van Poedit naar alle vertaalbare teksten binnen een plugin. Echter kan ik met Poedit niet onderscheid maken tussen vertalingen binnen de admin omgeving.
Er zijn meerdere gebruikers van Poedit die wel graag van een dergelijke functionaliteit gebruik willen maken. De ontwikkelaar van Poedit geeft echter in een ticket het volgende aan:
The scanning feature of Poedit is intended for basic, simple uses. If you have more demanding needs, they you should write a proper makefile and call xgettext in it to create a POT file from your sources; then use Poedit just to translate PO catalogs and update them from that POT file.
At this time, I don’t want additional complications in this part of Poedit. Maybe later, when all the other, more serious, problems are fixed.
Ik ben me daarom gaan verdiepen in de werking van xgettext:
- http://www.gnu.org/software/gettext/manual/html_node/xgettext-Invocation.html
- http://www.lxg.de/code/playing-with-xgettext
- http://stackoverflow.com/questions/1864233/recusive-xgettext
- http://stackoverflow.com/questions/1352995/xgettext-vs-gettext
- http://stackoverflow.com/questions/11451105/recursive-scan-for-files-with-xgettext
Uiteindelijk heb ik de volgende twee commando’s geschreven waarmee we de WooCommerce vertalingen kunnen opdelen in verschillende bestanden.
WooCommerce admin
find ./admin -iname "*.php" -type f | xgettext \ --from-code=UTF-8 \ --keyword=__ \ --keyword=_e \ --keyword=_n:1,2 \ --keyword=_x:1,2c \ --keyword=_ex:1,2c \ --keyword=_nx:1,2,4c \ --default-domain=woocommerce \ --language=PHP \ --copyright-holder="Remco Tolsma" \ --package-name=WooCommerce \ --package-version=2.0.5 \ --msgid-bugs-address="Remco Tolsma <[email protected]>" \ --files-from=- \ --output=woocommerce-admin.pot
WooCommerce
find ./ -iname "*.php" -type f | xgettext \ --from-code=UTF-8 \ --keyword=__ \ --keyword=_e \ --keyword=_n:1,2 \ --keyword=_x:1,2c \ --keyword=_ex:1,2c \ --keyword=_nx:1,2,4c \ --default-domain=woocommerce \ --language=PHP \ --copyright-holder="Remco Tolsma" \ --package-name=WooCommerce \ --package-version=2.0.5 \ --msgid-bugs-address="Remco Tolsma <[email protected]>" \ --files-from=- \ --exclude-file=woocommerce-admin.pot \ --output=woocommerce.pot
Bovenstaande commando’s bestaan uit 2 delen, een ‘find’ commando waarmee alle PHP-bestanden binnen de plugin worden gevonden. En een ‘xgettext’ commando die alle vertalingen binnen deze bestanden op zoekt. Hier worden de WordPress vertaalfuncties als ‘keyword’ meegegeven.
Mocht je overigens bij het uitvoeren van het tweede commando een “Segmentation” fout krijgen dan moet je misschien je gettext pakket updaten. Ik kreeg op mijn Mac deze fout met gettext versie 0.18.1. Na het updaten van gettext via MacPorts naar versie 0.18.2 was dit probleem opgelost:
sudo port selfupdate sudo port upgrade outdated
Vervolgens hebben we de gegenereerde .POT-bestanden toegevoegd aan onze GlotPress installatie.
Omgeving | Aantal teksten |
---|---|
WooCommerce | 1391 |
WooCommerce admin | 1112 |
Waar in WooCommerce 1.6.6 nog 2058 teksten in één bestand stonden en altijd geladen werden is dit met deze wijziging bijna gehalveerd. Deze verbetering hebben we ook verwerkt in de “WooCommerce (nl)” plugin. Met behulp van een Makefile kunnen we eenvoudig de 2 .POT-bestanden aanmaken:
WOOCOMMERCE_DIR=../woocommerce/ # Make POT files extract: cd $(WOOCOMMERCE_DIR) && \ find ./admin -iname "*.php" -type f | xgettext \ --from-code=UTF-8 \ --keyword=__ \ --keyword=_e \ --keyword=_n:1,2 \ --keyword=_x:1,2c \ --keyword=_ex:1,2c \ --keyword=_nx:1,2,4c \ --default-domain=woocommerce \ --language=PHP \ --copyright-holder="Remco Tolsma" \ --package-name=WooCommerce \ --package-version=2.0.5 \ --msgid-bugs-address="Remco Tolsma <[email protected]>" \ --files-from=- \ --output=$(CURDIR)/languages/woocommerce/woocommerce-admin.pot \ cd $(WOOCOMMERCE_DIR) && \ find ./ -iname "*.php" -type f | xgettext \ --from-code=UTF-8 \ --keyword=__ \ --keyword=_e \ --keyword=_n:1,2 \ --keyword=_x:1,2c \ --keyword=_ex:1,2c \ --keyword=_nx:1,2,4c \ --default-domain=woocommerce \ --language=PHP \ --copyright-holder="Remco Tolsma" \ --package-name=WooCommerce \ --package-version=2.0.5 \ --msgid-bugs-address="Remco Tolsma <[email protected]>" \ --files-from=- \ --exclude-file=$(CURDIR)/languages/woocommerce/woocommerce-admin.pot \ --output=$(CURDIR)/languages/woocommerce/woocommerce.pot
6 reacties op “Nederlandse vertaling WooCommerce 2.0.5”
Hoi Remco,
Weet jij misschien waarom de urls en de paginatitels van mijn Woocommerce shop niet vertaald zijn?
Als het goed is kun je deze zelf vertalen door de titels en slugs van de betreffende WordPress pagina’s te wijzigen.
En ik maar moeilijk doen door te zoeken in broncodes… Thanks!
Nog een vraagje. Ik wil de lange titel ‘Toevoegen aan winkelwagen’ veranderen in ‘Bestel’. Dit heb ik gedaan in de .po file van de wocommerce-nl plugin maar hij blijft hardnekkig staan.
Ik heb ook geprobeerd het stukje code aan functions.php toe te voegen maar daar ging heel de site van over de kop.
Zie ik misschien iets over het hoofd?
Het is sowieso niet verstandig om bestanden in plugins aan te passen, dergelijke wijzigingen gaan zeer waarschijnlijk verloren na updates. Je kunt de vertaalbestanden ook in je wp-content/languages map zetten en zo je eigen vertaalbestanden bijhouden. Mijn voorkeur gaat echter uit naar de methode beschreven in het volgende bericht:
https://www.remcotolsma.nl/2013/03/woocommerce-teksten-wijzigen/
Enige technische kennis is hierbij wel handig, mocht je dit niet hebben dan is het wellicht interessant om Pronamic in te schakelen: http://pronamic.nl/wordpress-expert/.
Alles doorzocht, ook offline in alle bestanden, maar ik krijg die !@#$% ‘Toevoegen aan winkelwagen’ maar niet aangepast… http://nieuwegolfset.nl/product/callaway-razr-x-complete-golfset/