Skip to main content

Translation: Missing Strings

The following strings cannot be translated in FluentCart 1.6.0,
FluentCart Pro 1.6.0 and FluentCart Customer Rights 0.1.2.

The admin SPA looks its text up by the English source string, against the
maps in app/Services/Translations/. The strings below are looked up but are
in none of them, so they never reach a .pot file.

#1 FROM fluent-cart-customer-rights (bundle: withdrawal.js)

Accept
Est. Refund
Line total
Link order
No withdrawal requests found based on your filter
Not matched
Please enter a valid order ID.
That action could not be completed.
That order could not be linked.
The request has been updated and the customer was notified by email.
The request is now linked to the order and marked verified.
Unit refund
Verified Mail
Verified User
Withdrawal Requests

The add-on enqueues its admin UI through the core Vite instance
(AdminPage.php:61) but ships no translation map of its own.

#2 FROM fluent-cart core (bundles: app.js, AttrGroups.js)

Add "%1$s" as new value
Search "%1$s" in %2$s
This will permanently delete the "%1$s" tax class and all its rates across every country (not just EU). Products using this class will fall back to Standard. Continue?
Unit
You must type "%s" exactly to proceed

Missing from admin-translation.php.

#3 ROUTE TITLES (73) β€” literals in the router definitions

Every route carries meta:{title:"…"} as a literal, while the navigation
entry next to it is translated. The literal ends up in the browser tab
(jQuery("head title").text(l.meta.title + " - FluentCart")), in the store
settings heading (v = T(g.meta.title || "Store Settings")) and in the
payment pages (getPageName() returns meta.title + " Settings").

Activated Sites
Add Notification
Addon Assets
Attribute Groups
Attributes
Cart & Checkout
Cohorts
Coupons
Coupons Settings
Create Order
Customer
Customers
Dashboard
Downloads
Edit Integration
Edit Notification
Edit PDF Template
Features & addon
Future Renewals
Gateway
Global Integrations
Integrations
Inventory
Invoice & Packing
License Settings
Licenses
Licensing
Logs
Mailing Settings
Manage License
Notifications
Onboarding
Order Bump
Orders
Overview
PDF Template Settings
PDF Templates
Pages Setup
Payment Settings
Product
Product Bulk Edit
Product Bulk Insert
Product Edit
Product Integrations
Product Page
Products
Profile
Purchase History
Refunds
Reminders
Retention
Revenue
Role Settings
S3
Sales
Settings
Sources
Storage Providers
Storage Settings
Store Digest
Store Setup
Subscriptions
Tax Settings
Upgrade Paths
View Customer
View License
View Order
View Order Bump
View Site
View Subscription
Withdrawal Requests
dashboard
taxes

#4 Fluent PDF Generator 2.1.1 β€” the settings page

renderSettings() outputs only the heading and boots a Vue app
(assets/start.js). It passes no translations and does not call
wp_set_script_translations, so the whole page is English:
Global PDF Settings, Paper size, Orientation, Font Family, Font size,
Font color, Heading color, Accent color, Language Direction,
Save Settings, Font Status, Install %d Missing Fonts.

#5 TRANSLATED IN THE CATALOGUE, HARDCODED IN THE UI

Today

Datepicker shortcuts. The entry next to it is wired correctly:
{text:"Today", value:()=>{…}} vs {text:xe("Last 6 Months"), value:()=>{…}}

YoY Growth (%)

Chart axis label. The series title above it uses u("YoY Growth"); the
axis is a separate literal with "(%)" appended.

No

Tax list, column "Filed". The column header is translated, the value is
not. Cause not established β€” probably a raw value.

Store Setup and the other route titles are point 3 above.

#6 STRINGS THAT ARE ALREADY BROKEN IN ENGLISH

Uploading... %s%

A single trailing % is not valid for sprintf.

Failed to ${actionText.replace('ed', '')} products
Some products were ${actionText} successfully

Two msgids contain JavaScript template literals, one of them with a
method call. Only the shell can be translated, and ${actionText} yields
English verbs either way.

For 1 and 2 the plumbing already exists: TransStrings.php passes every map
through a filter (fluent_cart/admin_translations), so an add-on can register
its own strings. Points 5 and 6 each need a one-line fix in the source.

Hi there,

Can you check the latest FluentCart update and let us know whether any missing strings in the core? Regarding the add on translation, this will be fixed when the update is released.

Thank you

Amimul Ihsan Mahdi, here you are (powered by Claude Code :-):

Follow-up to my earlier report, tested against FluentCart 1.6.1 and
FluentCart Pro 1.6.1.

Thanks β€” most of it is fixed. Details below, split into what is fixed, what
is new, and what is still open.

FIXED IN 1.6.1

  1. Route titles. All 73 now go through the translator:
    meta:{title:u("Store Setup")} instead of meta:{title:"Store Setup"}.

  2. The broken msgids are gone, replaced by numbered placeholders:
    "Uploading... %s%" -> "Uploading... %1$s"
    "Deleting... %s%" -> "Deleting... %1$s"
    "%s% Uploaded" -> "%1$s Uploaded"
    "Failed to ${actionText.replace('ed','')} products" -> "Failed to delete products" etc.
    "Some products were ${actionText} successfully" -> "Some products were deleted successfully" etc.
    "Filename too long. Maximum ${MAX_FILENAME_LENGTH}…" -> "… Maximum %1$s characters allowed"
    "In ${monthName}, your average monthly revenue…" -> "In %1$s, your average monthly revenue…"
    The churn/retention strings with ${churnRate} etc. likewise.

  3. YoY Growth (%) is in admin-translation.php now and the axis label uses it.

NEW IN 1.6.1

  1. Escaping in admin-translation.php. Four strings were added, but the key
    carries literal backslashes:

    'You must type "%1$s" exactly to proceed' => __('You must type "%1$s" …

    In PHP single quotes " is not an escape sequence, so the key really is
    You must type "%1$s" exactly to proceed β€” while the bundle asks for
    You must type "%1$s" exactly to proceed. The keys never match, so these
    four are still untranslatable:

    Add "%1$s" as new value
    Search "%1$s" in %2$s
    You must type "%1$s" exactly to proceed
    This will permanently delete the "%1$s" tax class and all its rates across
    every country (not just EU). Products using this class will fall back to
    Standard. Continue?

    The same pattern affects keys that were already in the map, e.g.
    'This will permanently delete "%1$s" and its %2$s variant(s).'

  2. Two former route titles now go through the translator but are missing from
    the map, so they are looked up and never found:

    Addon Assets (addon-assets.js)
    View Order Bump (order-bump.js)

STILL OPEN

  1. fluent-cart-customer-rights 0.1.2 is unchanged, so its 15 admin strings
    remain untranslatable β€” the add-on enqueues its UI through the core Vite
    instance but ships no translation map:

    Accept, Est. Refund, Line total, Link order,
    No withdrawal requests found based on your filter, Not matched,
    Please enter a valid order ID., That action could not be completed.,
    That order could not be linked.,
    The request has been updated and the customer was notified by email.,
    The request is now linked to the order and marked verified.,
    Unit refund, Verified Mail, Verified User, Withdrawal Requests

  2. "Unit" (app.js, a column header) is still looked up and still missing from
    the map.

  3. "Today" is half fixed: three of six occurrences now use the translator,
    three are still literals β€” one in app.js twice, one in chunks/index.js.

  4. Fluent PDF Generator 2.1.1 is unchanged: renderSettings() boots a Vue app
    (assets/start.js) without passing translations and without calling
    wp_set_script_translations, so the whole settings page stays English.