Jump to content

Le module PayPal n'affiche pas la bonne traduction dans une boutique multilingue


Recommended Posts

Pour reproduire : avoir plusieurs langues actives, à la page de paiement changer la langue, le texte du paiement("Payez par carte ou par compte PayPal") ne change pas de langue.

 

Dans mon cas, comme la France est le pays par défaut, les traductions paypal sont toujours en français (le module utilise un fichier XML pour les traductions et pas le système habituel).

 

Le problème se situe dans cette méthode (modules/paypal/paypal.php, l 1191) :

 

private function loadLangDefault()
{
 $paypal_country_default	= (int)Configuration::get('PAYPAL_COUNTRY_DEFAULT');
 $this->default_country	= ($paypal_country_default ? (int)$paypal_country_default : (int)Configuration::get('PS_COUNTRY_DEFAULT'));
 $this->iso_code = $this->getCountryDependency(Country::getIsoById((int)$this->default_country));
}

 

En fait, il y a deux problèmes :

 

- le code iso qui va être utilisé par la suite pour rechercher la bonne traduction est un code de pays et pas un code langue

- le code iso est défini en dur par le pays par défaut d'où le bug décrit plus haut

 

 

Résolution :

 

Remplacer par :

$this->iso_code = $this->getCountryDependency(strtoupper($this->context->language->iso_code));

// http://www.prestashop.com/forums/topic/201446-translate-pay-with-card-or-paypal-account/

 

Cela marche avec les pays qui ont le même code iso pour le pays et la langue. Cela ne fonctionnera pas, par exemple, pour la Grèce (l'anglais sera sélectionné par défaut). Il faut dans ce cas une fonction :

 

function getCountryByLang($lang_iso_code)
{
 switch($lang_iso_code)
 {
case "el": // Greek
  return "GR";
default:
  return strtoupper($lang_iso_code);
 }
}

 

Cependant il reste un problème, et il explique le choix fait par ce module, les traductions contiennent des infos spécifiques au pays (numéro de téléphone du customer support). Et je ne sais pas dans quelle mesure cela peut provoquer d'autres problèmes...

 

Donc il faudrait revoir complétement le module pour que les traductions soient liées à la langue utilisée par la boutique et pas au pays de la boutique. Et que les informations spécifiques puissent être sélectionnées par pays.

Edited by emily_d (see edit history)
  • Like 1
Link to comment
Share on other sites

Je vois que la méthode getPaymentMethods utilise les codes iso, donc la solution donnée plus haut peut avoir des conséquences qu'il faudrait analyser profondément. Donc pour l'instant, je vais me contenter de la solution suivante :

 

// modules/paypal/paypal.php, l 703)
public function getTranslations()
{
...
//remplacer
if (($this->iso_code != 'default') && ($country_iso == $this->iso_code))
// par
if ((strtoupper($this->context->language->iso_code) != 'default') && ($country_iso == strtoupper($this->context->language->iso_code)))
...
}

 

De cette manière on ne récupère que la bonne traduction et on ne touche pas au reste du fonctionnement du module.

 

Cette solution ne fonctionne que si le code iso du pays et de la langue sont identiques. Pour le cas de l'anglais, code iso 'en', la traduction par défaut de paypal sera sélectionnée (traduction en anglais, cela tombe bien...).

Edited by emily_d (see edit history)
  • Like 3
  • Thanks 1
Link to comment
Share on other sites

  • 4 weeks later...

Thanks emily_d, that has been of great help.

 

Now my problem is that the Paypal page is always opened in spanish ( my site is in spanish and english), I have tried to set my Paypal country to english but it didn't help.

 

Have read the whole code in Paypal module but can't find were to set language code except in express checkout which I don't use.

Link to comment
Share on other sites

Thanks emily_d, that has been of great help.

 

Now my problem is that the Paypal page is always opened in spanish ( my site is in spanish and english), I have tried to set my Paypal country to english but it didn't help.

 

Have read the whole code in Paypal module but can't find were to set language code except in express checkout which I don't use.

 

Hi,

 

You should ask someone in another coutry (and another language) to test your paypal checkout page to see if the page is always in spanish for them. Because that's probably a per user setting. For more info :

 

Adding &lc=ES will only work on Buy Now buttons because PayPal provides no way for us to specify an arbitrary language or locale for cart-based checkouts. PayPal already jumps through a lot of hoops to guess the buyer's language preference accurately, so you may not need to do anything special anyway.

 

If the buyer has a language cookie set in their browser, PayPal will respect that; if the buyer has a language preference set in their Web browser, PayPal will respect that; if you are selling tangible goods that require a shipping address, PayPal will apply a language based on the country the buyer selected in their cart (if they have a language assigned for the selected country). Finally, regardless of what language PayPal uses on their initial checkout page, once the buyer logs into their PayPal account, the language preference in the buyer's PayPal account would be applied.

 

http://www.e-junkie..../pg/0#post15124

Link to comment
Share on other sites

This is the way it should be but regarding the feedback from some customers it isn't.

 

The last one was from Malaysia and selected english in my site, but Paypal's site opened in Spanish and there was no way to change the language.

 

I have been able to set Localcode now and it seems to work, I have opened a threat for this: http://www.prestashop.com/forums/topic/238633-paypal-language/

Link to comment
Share on other sites

  • 2 weeks later...

Je vois que la méthode getPaymentMethods utilise les codes iso, donc la solution donnée plus haut peut avoir des conséquences qu'il faudrait analyser profondément. Donc pour l'instant, je vais me contenter de la solution suivante :

 

// modules/paypal/paypal.php, l 703)
public function getTranslations()
{
...
//remplacer
if (($this->iso_code != 'default') && ($country_iso == $this->iso_code))
// par
if ((strtoupper($this->context->language->iso_code) != 'default') && ($country_iso == strtoupper($this->context->language->iso_code)))
...
}

 

De cette manière on ne récupère que la bonne traduction et on ne touche pas au reste du fonctionnement du module.

 

Cette solution ne fonctionne que si le code iso du pays et de la langue sont identiques. Pour le cas de l'anglais, code iso 'en', la traduction par défaut de paypal sera sélectionnée (traduction en anglais, cela tombe bien...).

 

Merci !

Link to comment
Share on other sites

  • 1 month later...

Je vois que la méthode getPaymentMethods utilise les codes iso, donc la solution donnée plus haut peut avoir des conséquences qu'il faudrait analyser profondément. Donc pour l'instant, je vais me contenter de la solution suivante :

 

// modules/paypal/paypal.php, l 703)
public function getTranslations()
{
...
//remplacer
if (($this->iso_code != 'default') && ($country_iso == $this->iso_code))
// par
if ((strtoupper($this->context->language->iso_code) != 'default') && ($country_iso == strtoupper($this->context->language->iso_code)))
...
}

 

De cette manière on ne récupère que la bonne traduction et on ne touche pas au reste du fonctionnement du module.

 

Cette solution ne fonctionne que si le code iso du pays et de la langue sont identiques. Pour le cas de l'anglais, code iso 'en', la traduction par défaut de paypal sera sélectionnée (traduction en anglais, cela tombe bien...).

 

 

 

Thank you, so much! ^__^

Link to comment
Share on other sites

  • 3 weeks later...

La façon dont PayPal choisit la langue pour sa page de paiement est relativement complexe (cf. message plus haut "If the buyer has a language cookie set in their browser, PayPal will respect that; if the buyer has a language preference set in their Web browser, PayPal will respect that..."), il arrive que certains clients soient redirigés vers une page dans une autre langue, si tu rencontres un jour ce problème essaie cette solution.

Link to comment
Share on other sites

  • 5 weeks later...

Bonjours à tous,

 

Il me semble faire face au même problème:

 

Juste pour être sur, on parle de la solution de paiement intégrée au site comme sur la capture écran suivante:

post-575383-0-30511100-1373480813_thumb.png

 

Si oui, voici mon pb:

Mon site est en 4 langues (FR/ES/IT/EN). J'ai ma société en Italie. J'ai donc souscrit à un compte paypal pro en Italie. J'ai installé le module et tout ce qui touche au paiement est exclusivement en Italien. J'ai appelé Paypal et ils me disent que je ne peux utiliser QUE l'Italien ou l'Anglais (car je suis en Italie. Si j'était en France, je ne pourrais utiliser que le Français et l'Anglais selon lui).

Il me dit de remplacer la valeur lc de IT à US si je veux avoir le module de paiement en Anglais (ce qui est mieux que l'Italien, mais pas top).

J'ai cherché partout, mais la seule lc que je trouve à comme valeur {$iso_code}. J'ai essayé de remplacer mais rien ne bouge.

 

J'ai donc essayé la solution d'Emily, mais rien à faire.

Est-ce parceque je suis en Italie? Pourtant mon pc et mon navigateur sont en Français.

 

Merci bcp

 

aallbbyy

Link to comment
Share on other sites

Bonjours à tous,

 

Il me semble faire face au même problème:

 

Juste pour être sur, on parle de la solution de paiement intégrée au site comme sur la capture écran suivante:

post-575383-0-30511100-1373480813_thumb.png

 

Si oui, voici mon pb:

Mon site est en 4 langues (FR/ES/IT/EN). J'ai ma société en Italie. J'ai donc souscrit à un compte paypal pro en Italie. J'ai installé le module et tout ce qui touche au paiement est exclusivement en Italien. J'ai appelé Paypal et ils me disent que je ne peux utiliser QUE l'Italien ou l'Anglais (car je suis en Italie. Si j'était en France, je ne pourrais utiliser que le Français et l'Anglais selon lui).

Il me dit de remplacer la valeur lc de IT à US si je veux avoir le module de paiement en Anglais (ce qui est mieux que l'Italien, mais pas top).

J'ai cherché partout, mais la seule lc que je trouve à comme valeur {$iso_code}. J'ai essayé de remplacer mais rien ne bouge.

 

J'ai donc essayé la solution d'Emily, mais rien à faire.

Est-ce parceque je suis en Italie? Pourtant mon pc et mon navigateur sont en Français.

 

Merci bcp

 

aallbbyy

 

Bonjour,

Quelqu'un pour m'aider svp :)

aallbbyy

Link to comment
Share on other sites

  • 5 months later...
  • 1 year later...

Bonjour,

 

J'ai le même problème avec les US. Le module se met en Français sur la page de check out :/ Je suis avec PayPal Evolution et Prestashop 1.5.

On essayé EN et Gb et ça ne fonctionne pas...

Une petite idée?

 

Merci :)

 

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...