WordPress.WP.I18n.NonSingularStringLiteralPlural
Non Singular String Literal Plural
A translation or text-domain pattern does not match WordPress internationalization expectations.
Why It Shows Up
Plugin Check found missing text domains, mismatched domains, missing translator comments, variable-only strings, placeholder issues, or deprecated translation loading patterns.
Why It Matters
Translation issues make the plugin harder to localize and can break strings for non-English WordPress users.
How to Fix
- Use the plugin slug as the text domain unless the plugin intentionally declares a different one.
- Keep translatable strings literal and move variables into placeholders.
- Add translator comments before strings with placeholders or ambiguous context.
References
Affected Plugins
| Rank | Plugin | Score | Errors | Warnings | Installs | Updated | Top Issue |
|---|---|---|---|---|---|---|---|
| #51 | DEPRECATED – Shipmondo – A complete shipping solution for WooCommerce | 32 | 166 | 119 | 5k+ | Output is not escaped | |
| #52 | PublishPress Checklists: Pre-Publishing Approval Checklist – Validate Post Requirements | 33 | 140 | 182 | 3k+ | Missing Translators Comment | |
| #53 | Cornerstone | 34 | 161 | 174 | 30k+ | Nonce verification recommended | |
| #54 | Ni WooCommerce Custom Order Status | 34 | 256 | 139 | 2k+ | Text Domain Mismatch | |
| #55 | zipMoney(Zip Co) Payments Plugin for WooCommerce | 34 | 147 | 70 | 2k+ | Text Domain Mismatch | |
| #56 | Gum Addon for Elementor | 35 | 660 | 72 | 50k+ | Text Domain Mismatch | |
| #57 | Enhanced Media Library | 36 | 361 | 117 | 60k+ | Unsafe printing function | |
| #58 | PublishPress Statuses – Custom Post Status and Workflow | 36 | 232 | 79 | 1k+ | Missing Arg Domain | |
| #59 | ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution | 36 | 63 | 667 | 100k+ | Non-prefixed global variable | |
| #60 | WP fail2ban Blocklist | 36 | 61 | 63 | 3k+ | SQL query is not prepared | |
| #61 | LH Archived Post Status | 37 | 150 | 64 | 3k+ | Text Domain Mismatch | |
| #62 | Ultimate Tag Cloud Widget | 37 | 715 | 16 | 4k+ | Output is not escaped | |
| #63 | QR Redirector | 39 | 48 | 54 | 4k+ | Output is not escaped | |
| #64 | Reusable Blocks Extended | 42 | 38 | 15 | 20k+ | Output is not escaped | |
| #65 | FakerPress | 53 | 66 | 152 | 10k+ | Non-prefixed global variable | |
| #66 | Simple Blog Stats | 53 | 25 | 76 | 4k+ | Non-prefixed function |