I'm still having some English mixed with French even though these strings are translated since years in transifex. Like in this example:

Veuillez vérifier attentivement les informations ci-dessous. Cliquez sur Retour si vous avez besoin d'y apporter des changements. To complete your contribution, click the Continue button below.

And forcing to translate in word replacement doesn't work either. Of course I cleared all caches.

The concerned file is /sites/all/modules/civicrm/CRM/Core/Payment/Manual.php line 255

Any idea?

POST : I'm getting confused. The text

To complete your contribution, click the %1 button below.

is supposed to be translated since 8 years but should appear in


when it's not and is to be find in

/sites/all/modules/civicrm/CRM/Core/Payment/Manual.php line 255

  • My answer below might be wrong, but just want to clarify something first: Where are you seeing that it has been translated already? I'm asking because on second glance I don't think that exact string is in the .po files? Are you seeing it there?
    – Demerit
    Commented Jun 6, 2019 at 0:15
  • I checked in Transifex and the string was tranlated years ago Commented Jun 6, 2019 at 13:50
  • Which po file? I expected to see it in common-base.po where the other Core/Payment/XXX strings are but I don't see it anywhere?
    – Demerit
    Commented Jun 6, 2019 at 13:52
  • I haven't checked there Commented Jun 6, 2019 at 14:03

2 Answers 2


This string has changed in core, somewhat recently, so it has broken the translation.

The short answer, is that the new string had not been yet pushed to Transifex, and this relies on a manual intervention by project admins. It has now been updated today.

This process has been somewhat problematic for a while. It was not much of an issue because user-facing strings do not change that often, but recently as we tweak more the interface, it has become more apparently. We definitely need to further automate this process.

I started restructuring the documentation on the translation wiki. Hopefully we can make the process clearer and simpler, so that we can automate it at some point.

If you would like to help improve this process, please join us in the CiviCRM translation channel.


I'm not super familiar with translation but I think the issue is the use of ts() in that file.

The string it's expecting is To complete this transaction, click the <strong>%1</strong> button below.

So it's expecting ts() to be used with a placeholder and second parameter, but I'm not sure how that would work here because you also want to translate the word "Continue" right?

But just to check, if you change that line to:

return ts('To complete your contribution, click the <strong>%1</strong> button below.', array(1 => 'Continue'));

does it work?

  • Thanks Demerit, I will give a try. Commented Jun 6, 2019 at 12:58
  • See also my comment above under the question - on second glance I'm thinking this exact string was never translated?
    – Demerit
    Commented Jun 6, 2019 at 13:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.