Skip to main content

FluentCRM 3.2.0: about 230 strings no translation file can reach

About 230 strings in FluentCRM 3.2.0 and Pro 3.2.0 stay English, whatever translation is installed. I found them while translating both plugins into German (6,188 strings, informal and formal). Everything below was measured on 3.2.0.

1. Pro messaging: 220 strings without a translation map
The SMS/WhatsApp screens look up their texts with $t(), but none of these 220 keys is in app/Services/TransStrings.php, and Pro has no map of its own. So inbox, template editor, audience selector and the message history in the contact profile stay English in every language. Examples: "Conversations", "Choose an approved template", "Add Unsubscribe Button", "Consent confirmed". Most of them sit in Inbox.js (53), TemplateEditor.js (38), OneTimeAudienceSelector.js (33), ProfileMessages.js (30), Templates.js (27) and CreateFlow2.js (26). I can post the full list.

2. Missing keys in the core map

  • Plurals via $_n(): "%d Email / %d Emails" and "%d subscriber / %d subscribers" in the sequence list, "%d field / %d fields" in the company form
  • "Could not import campaign", "No email templates found.", "Upgrade to FluentCRM Pro to Get Messaging Settings"
  • "System Admin Tools", the only one of 23 titles in the settings menu without a map entry

3. Hard-coded English

  • Dashboard period selector: "30 Days", "60 Days", … (periodOptions in Dashboard.js)
  • Default title of a new email template: "Untitled - Created at …"

4. Raw keys in the English UI
TransStrings.php passes AbCart_Opt_Out_Help_Prefix and AbCart_Opt_Out_Help_Suffix to __() as source strings, so the abandoned cart settings show the keys themselves. Probably meant: "Use the smartcode" and "to let users opt out of cart tracking."

5. Two versions of the runtime translator
One replaces /%(\d*)\$?s|%d/, the other /%(\d*)s|%d/. The second one leaves a stray $s behind when a string uses %1$s.

6. Typos in source strings
"Max Rune Time", "Compact Compact View", "may not 100% correct". One hint about FluentCart data says "FluentCRM".

7. One source string, two meanings
"Cancelled" is used for sequences and for orders, "Title" for notes and for the name prefix (Mr/Mrs) in the email preference form. German needs different words here; a msgctxt would separate them.

Happy to test fixes.
Peter

Two more from the same round, both on 3.2.0:

8. Admin bar search window
adminbar-search.js looks up "Search in CRM", "Best Matches" and "Quick links" in fcrm_adminbar_search_vars.trans. AdminBar.php doesn't provide the first two, and the third only as "Quick Links" (capital L), so all three stay English.

9. CRM profile widget in FluentCommunity Pro
ContactAdvancedFilter::pushCrmProfile() prints the contact status as ucfirst($profile->status) ("Unsubscribed") and the counters as ucfirst() of the keys from Subscriber::stats() ("Emails", "Opens", "Clicks"). None of them goes through gettext. fluentcrm_subscriber_statuses(true) already has translated status labels.