The translation release. Choosing another language used to paint the edges and leave the real work in English. Every visible string now goes through the catalog, the interface reads right to left when the language does, and translations arrive as WordPress language packs through the same Updates screen you already use. Twenty-three languages ship with it, covering about half of WordPress installs. In the same cycle, contributed by Renan Diaz, the order page takes the shape merchants already know, the orders list filters the way Shopify does, and a subscription opens on its own page with the same filter bar.
Added
- Minn reads in your language. Your profile's Language setting now applies to the whole of Minn, not half of it. Interface text, buttons, table headings, empty states, confirmations and error messages all follow the language you choose, and a language you pick for yourself does not change what anybody else sees.
- Right to left. Persian, Arabic, Hebrew, Urdu and every other right-to-left language now get a genuinely mirrored interface: the sidebar, menus, popovers and settings all move to the correct side rather than being flipped and left broken. Addresses, file paths, version numbers and code stay readable left to right inside the surrounding text, which is the part that usually goes wrong. Things that should not mirror do not: image crop handles stay where the image is, and previous and next stay physical.
- Translations install themselves. Language files arrive through the same Updates screen as everything else and update alongside the plugin, so there is nothing extra to install or maintain. Minn only offers files for languages your site can actually display.
- Twenty-three languages. Japanese, Spanish (Spain and Mexico), German, French, Portuguese (Brazil and Portugal), British English, Italian, Dutch, Russian, Polish, Turkish, Persian, Arabic, Vietnamese, Indonesian, Czech, Swedish, Chinese (China), Hungarian, Danish and Hebrew.
- The order page grew into the shape merchants already know. Contributed by Renan Diaz. The main column holds the work: items with the money broken down, status, payment, refunds, mail and the timeline. The sidebar holds the context: customer, shipping, attribution, subscriptions and other orders from the same customer, each card showing text until its pencil opens the form. Refunds move behind a header action offered when the order has something to refund, items on an editable order can be added, removed and requantified through WooCommerce's own idioms, and status names come from WooCommerce itself, so a translated store or a plugin-registered status reads correctly.
- The orders list filters the way Shopify does. Contributed by Renan Diaz. One row holds a status view, the search box and Add filter; active filters sit beneath as removable chips. Status accepts more than one at a time, and date window, customer and product each map to a native WooCommerce query, so the narrowing happens on the server and survives pagination. Filters live in the URL, so a filtered list can be reloaded or pasted to someone else.
- Subscriptions get a detail page and the same filter bar. Contributed by Renan Diaz. A subscription opens on its own page in the order page's shape, with editable items and schedule, its notes timeline, coupons, and a quick view of related orders. The subscriptions list wears the orders filter bar with its own status vocabulary, and orders that belong to a subscription carry a badge in the orders list.
Fixed
- A subsite's activity log stays on that subsite. WP Activity Log keeps network-wide events in the same table as each site's events. A subsite administrator could see those global records in Minn, including usernames, IP addresses and event details. Subsite views now select only that site's records.
- Order tools respect each order's permissions. A delegated store role that could work with orders generally could ask the subscription badge, refund and email endpoints about an order outside its assigned scope. Minn now checks every requested order before returning details or offering an action.
- A cached language-pack update never loses its checksum requirement. If WordPress remembered an update after the release manifest changed, Minn could stop finding the checksum and let WordPress continue the download. Every Minn package is now refused unless its checksum is present at install time; unrelated WordPress downloads still pass through untouched.
- Cards stopped being doors in any language but English. Overview stat cards and System health checks worked out where to send you by matching their own label text, so translating the label quietly removed the destination. They now route on something that does not change between languages.
- Counted things read correctly everywhere. Anything Minn counts followed the English rule for singular and plural. That is wrong in most languages: Japanese has one form, Russian and Polish have three, Arabic has six. Minn now follows each language's own rule.
- A language chosen in your profile applies to all of Minn. Because Minn runs at its own address rather than inside the classic admin, WordPress only handed it the site's language. Choosing a language for yourself translated part of the screen and left the rest, and it could never turn on a right-to-left layout.
- The chrome follows a language change. New, Search, the topbar title (Account / Your profile) and the Users table headings used to stay in the language you started in, and the New menu opened on the wrong side of the screen in a right-to-left language. They now update with the rest of the page, and the menu sits under the button.
- Overview and Extensions finish the translation. Store attention labels, activity-chart hovers, notification tabs, update controls, extension filters and plugin/theme context menus no longer fall back to English. Notification panels also enter from the left in a right-to-left language, and third-party notice buttons no longer expose hidden screen-reader suffixes as visible text.
- Lists, store screens and plugin surfaces finish the translation. Media details and actions, WooCommerce filters and statuses, list counts and pagination, settings sections, form and mail views, activity-log severity, and adapter status cards now use the active language. One-form languages such as Japanese and Chinese also keep their translated count labels instead of falling back to an English plural.
- System diagnostics finish the translation. Health summaries, generated-time labels, database and autoload details, extra log counts, and the Extensions and Integrations manifests no longer switch back to English below their translated headings. Japanese also uses natural labels for the autoload column and freshly generated reports.
- Adapter actions and admin controls finish the translation. Shared Open menus, adapter detail labels and known states, command-palette maintenance actions, user roles and passwords, taxonomy buttons, and inactive widgets now follow the active language. Links back to Forminator, WP Activity Log and every other adapter use one translated Open action, and backup adapters use localized relative time.
- The editor and appearance controls finish the translation. Theme choices, editor cards and revision counts, featured-image and media-library states, block names, visibility choices, publish controls, and the agent-guide action now follow the active language.
- An unchanged language pack stays on its existing release. Two translations can share the same English source but carry different meanings through gettext context. If those entries merely changed order in a regenerated catalog, the release pipeline could mistake that for new translation work and publish another pack. The content check now ignores entry order completely, so only a real translation change moves that locale forward.
- Translated dashboard and media labels stay inside their markup. Five translated strings reached an HTML or attribute slot without escaping, including the dashboard chart title and the Safe SVG note. Catalog text is escaped at every one of those boundaries now, and the release check no longer relies on line-number exceptions that went stale as the app grew.
- A partial language-pack build cannot quietly drop a locale. The release checks treated a missing catalog or missing pack archive as though that language simply was not part of the release. Both cases now stop the release with the exact missing file instead of removing its update from the manifest.
- Editing one order card can no longer blank another. The order save read its values from whatever form was on screen, so saving the customer dialog used to write empty strings over the shipping address it could not see. Every field now falls back to the order's stored value when its input is absent.
- The orders and subscriptions lists print WooCommerce's own status labels. The list showed the raw slug ("on hold", "pending") while the detail page one click away showed the real label ("On hold", "Pending payment"). Both now read the label from WooCommerce, which also lets a translated store read its own vocabulary.
- An order's Back returns where the visit started. Opening a renewal order from its subscription used to strand you on the orders list; the button now names and returns to the place you came from.
- An order's status is shown once. The items card used to repeat the same chip already in the header and the Status card, so a glance read as three statuses. The items card now names the count and keeps its actions; the header states the status and the Status card changes it.
- A profile language with a variant suffix no longer blanks the admin. Locales such as Swiss German informal (
de_CH_informal) are not valid Intl tags. Every date on screen used to throw, so every view died mid-paint. Minn now walks the tag down to something the browser accepts, and the page stays up even when that language has no Minn catalog. - Switching language also installs plugin and theme packs. Changing your profile language used to fetch WordPress core's pack and stop there, so WooCommerce statuses and other plugin strings stayed English. The same switch now installs those packs too, and a pack that fails to download is refused without saving the broken locale.
- The new order and subscription strings are in every catalog. Filters, coupons, notes, attribution and the subscription schedule landed in English after the merged pull requests. All twenty-three catalogs cover them now.
- Changing language no longer reloads the page. The chrome, lists and cards repaint in the language you just chose, and the New menu sits under the button in a right-to-left layout instead of opening on the wrong side.
- A language pack is ready the first time you need it. Activating Minn now primes the catalogs for the languages already on the site, so the first visit after install is not a half-translated one.
- Order and subscription popovers stay on screen. The filter and items menus used to open off the top of the viewport, and a scroll left them floating. They now clamp like every other popover and close when the page moves. Adding a note also clears the composer, and note times are read as GMT so a timestamp is not shifted twice.
- The subscription badge fits the cell it lives in. The worded pill was wider than the order-number column, so a Subscription or Renewal mark clipped into a sliver that still looked clickable. The badge is the icon alone now; the word lives in the accessible name and in the popover the badge already opened. The parent order and its renewals also use different shapes, not one shape in two colours.
- Card-head actions share one right edge. More than one button in a card head used to push each other apart, and the icons had no tooltip until a second later, and never on keyboard focus. The actions now sit together, and the tooltip is drawn from the accessible name on hover and on focus.
- The add-product picker shows the product picture. Searching for a line item used to be names and SKUs only. The picker now shows the product image next to the match.