diff --git a/app/assets/javascripts/discourse/app/components/flag-action-type.js b/app/assets/javascripts/discourse/app/components/flag-action-type.js
index 93de11b8fb6..50f041d9b21 100644
--- a/app/assets/javascripts/discourse/app/components/flag-action-type.js
+++ b/app/assets/javascripts/discourse/app/components/flag-action-type.js
@@ -20,7 +20,7 @@ export default Component.extend({
   )
   formattedName(name, nameKey, isCustomFlag, username) {
     if (isCustomFlag) {
-      return name.replace("{{username}}", username);
+      return name.replace(/{{username}}|%{username}/, username);
     } else {
       return I18n.t("flagging.formatted_name." + nameKey);
     }
diff --git a/app/assets/javascripts/discourse/app/components/reviewable-score.js b/app/assets/javascripts/discourse/app/components/reviewable-score.js
index ee36959c616..d9b18492cfc 100644
--- a/app/assets/javascripts/discourse/app/components/reviewable-score.js
+++ b/app/assets/javascripts/discourse/app/components/reviewable-score.js
@@ -10,7 +10,10 @@ export default Component.extend({
   @discourseComputed("rs.score_type.title", "reviewable.target_created_by")
   title(title, targetCreatedBy) {
     if (title && targetCreatedBy) {
-      return title.replace("{{username}}", targetCreatedBy.username);
+      return title.replace(
+        /{{username}}|%{username}/,
+        targetCreatedBy.username
+      );
     }
 
     return title;
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml
index 95830e309ae..8d7d1724c27 100644
--- a/config/locales/client.en.yml
+++ b/config/locales/client.en.yml
@@ -34,8 +34,8 @@ en:
             mb: MB
             tb: TB
       short:
-        thousands: "{{number}}k"
-        millions: "{{number}}M"
+        thousands: "%{number}k"
+        millions: "%{number}M"
     dates:
       # Use Moment.js format string: https://momentjs.com/docs/#/displaying/format/
       time: "HH:mm"
@@ -265,11 +265,11 @@ en:
     weekly: "weekly"
     every_month: "every month"
     every_six_months: "every six months"
-    max_of_count: "max of {{count}}"
+    max_of_count: "max of %{count}"
     alternation: "or"
     character_count:
-      one: "{{count}} character"
-      other: "{{count}} characters"
+      one: "%{count} character"
+      other: "%{count} characters"
 
     related_messages:
       title: "Related Messages"
@@ -352,16 +352,16 @@ en:
         no_value: "No, keep"
 
     topic_count_latest:
-      one: "See {{count}} new or updated topic"
-      other: "See {{count}} new or updated topics"
+      one: "See %{count} new or updated topic"
+      other: "See %{count} new or updated topics"
 
     topic_count_unread:
-      one: "See {{count}} unread topic"
-      other: "See {{count}} unread topics"
+      one: "See %{count} unread topic"
+      other: "See %{count} unread topics"
 
     topic_count_new:
-      one: "See {{count}} new topic"
-      other: "See {{count}} new topics"
+      one: "See %{count} new topic"
+      other: "See %{count} new topics"
 
     preview: "preview"
     cancel: "cancel"
@@ -372,7 +372,7 @@ en:
 
     upload: "Upload"
     uploading: "Uploading..."
-    uploading_filename: "Uploading: {{filename}}..."
+    uploading_filename: "Uploading: %{filename}..."
     clipboard: "clipboard"
     uploaded: "Uploaded!"
 
@@ -434,7 +434,7 @@ en:
         optional: "You can claim this item to prevent others from reviewing it."
         required: "You must claim items before you can review them."
         claimed_by_you: "You've claimed this item and can review it."
-        claimed_by_other: "This item can only be reviewed by <b>{{username}}</b>."
+        claimed_by_other: "This item can only be reviewed by <b>%{username}</b>."
       claim:
         title: "claim this topic"
       unclaim:
@@ -455,7 +455,7 @@ en:
       view_pending: "view pending"
       topic_has_pending:
         one: "This topic has <b>%{count}</b> post pending approval"
-        other: "This topic has <b>{{count}}</b> posts pending approval"
+        other: "This topic has <b>%{count}</b> posts pending approval"
       title: "Review"
       topic: "Topic:"
       filtered_topic: "You have filtered to reviewable content in a single topic."
@@ -473,17 +473,17 @@ en:
 
       user_percentage:
         summary:
-          one: "{{agreed}}, {{disagreed}}, {{ignored}} ({{count}} total flag)"
-          other: "{{agreed}}, {{disagreed}}, {{ignored}} ({{count}} total flags)"
+          one: "%{agreed}, %{disagreed}, %{ignored} (%{count} total flag)"
+          other: "%{agreed}, %{disagreed}, %{ignored} (%{count} total flags)"
         agreed:
-          one: "{{count}}% agree"
-          other: "{{count}}% agree"
+          one: "%{count}% agree"
+          other: "%{count}% agree"
         disagreed:
-          one: "{{count}}% disagree"
-          other: "{{count}}% disagree"
+          one: "%{count}% disagree"
+          other: "%{count}% disagree"
         ignored:
-          one: "{{count}}% ignore"
-          other: "{{count}}% ignore"
+          one: "%{count}% ignore"
+          other: "%{count}% ignore"
       topics:
         topic: "Topic"
         reviewable_count: "Count"
@@ -493,10 +493,10 @@ en:
         details: "details"
         unique_users:
           one: "%{count} user"
-          other: "{{count}} users"
+          other: "%{count} users"
       replies:
         one: "%{count} reply"
-        other: "{{count}} replies"
+        other: "%{count} replies"
       edit: "Edit"
       save: "Save"
       cancel: "Cancel"
@@ -565,25 +565,25 @@ en:
         description: "We've received your new post but it needs to be approved by a moderator before it will appear. Please be patient."
         pending_posts:
           one: "You have <strong>%{count}</strong> post pending."
-          other: "You have <strong>{{count}}</strong> posts pending."
+          other: "You have <strong>%{count}</strong> posts pending."
         ok: "OK"
 
     user_action:
-      user_posted_topic: "<a href='{{userUrl}}'>{{user}}</a> posted <a href='{{topicUrl}}'>the topic</a>"
-      you_posted_topic: "<a href='{{userUrl}}'>You</a> posted <a href='{{topicUrl}}'>the topic</a>"
-      user_replied_to_post: "<a href='{{userUrl}}'>{{user}}</a> replied to <a href='{{postUrl}}'>{{post_number}}</a>"
-      you_replied_to_post: "<a href='{{userUrl}}'>You</a> replied to <a href='{{postUrl}}'>{{post_number}}</a>"
-      user_replied_to_topic: "<a href='{{userUrl}}'>{{user}}</a> replied to <a href='{{topicUrl}}'>the topic</a>"
-      you_replied_to_topic: "<a href='{{userUrl}}'>You</a> replied to <a href='{{topicUrl}}'>the topic</a>"
+      user_posted_topic: "<a href='%{userUrl}'>%{user}</a> posted <a href='%{topicUrl}'>the topic</a>"
+      you_posted_topic: "<a href='%{userUrl}'>You</a> posted <a href='%{topicUrl}'>the topic</a>"
+      user_replied_to_post: "<a href='%{userUrl}'>%{user}</a> replied to <a href='%{postUrl}'>%{post_number}</a>"
+      you_replied_to_post: "<a href='%{userUrl}'>You</a> replied to <a href='%{postUrl}'>%{post_number}</a>"
+      user_replied_to_topic: "<a href='%{userUrl}'>%{user}</a> replied to <a href='%{topicUrl}'>the topic</a>"
+      you_replied_to_topic: "<a href='%{userUrl}'>You</a> replied to <a href='%{topicUrl}'>the topic</a>"
 
-      user_mentioned_user: "<a href='{{user1Url}}'>{{user}}</a> mentioned <a href='{{user2Url}}'>{{another_user}}</a>"
-      user_mentioned_you: "<a href='{{user1Url}}'>{{user}}</a> mentioned <a href='{{user2Url}}'>you</a>"
-      you_mentioned_user: "<a href='{{user1Url}}'>You</a> mentioned <a href='{{user2Url}}'>{{another_user}}</a>"
+      user_mentioned_user: "<a href='%{user1Url}'>%{user}</a> mentioned <a href='%{user2Url}'>%{another_user}</a>"
+      user_mentioned_you: "<a href='%{user1Url}'>%{user}</a> mentioned <a href='%{user2Url}'>you</a>"
+      you_mentioned_user: "<a href='%{user1Url}'>You</a> mentioned <a href='%{user2Url}'>%{another_user}</a>"
 
-      posted_by_user: "Posted by <a href='{{userUrl}}'>{{user}}</a>"
-      posted_by_you: "Posted by <a href='{{userUrl}}'>you</a>"
-      sent_by_user: "Sent by <a href='{{userUrl}}'>{{user}}</a>"
-      sent_by_you: "Sent by <a href='{{userUrl}}'>you</a>"
+      posted_by_user: "Posted by <a href='%{userUrl}'>%{user}</a>"
+      posted_by_you: "Posted by <a href='%{userUrl}'>you</a>"
+      sent_by_user: "Sent by <a href='%{userUrl}'>%{user}</a>"
+      sent_by_you: "Sent by <a href='%{userUrl}'>you</a>"
 
     directory:
       filter_name: "filter by username"
@@ -829,7 +829,7 @@ en:
       required: 'Please enter a value for "%{name}"'
 
     user:
-      said: "{{username}}:"
+      said: "%{username}:"
       profile: "Profile"
       mute: "Mute"
       edit: "Edit Preferences"
@@ -905,12 +905,12 @@ en:
       enable_defer: "Enable defer to mark topics unread"
       change: "change"
       featured_topic: "Featured Topic"
-      moderator: "{{user}} is a moderator"
-      admin: "{{user}} is an admin"
+      moderator: "%{user} is a moderator"
+      admin: "%{user} is an admin"
       moderator_tooltip: "This user is a moderator"
       admin_tooltip: "This user is an admin"
       silenced_tooltip: "This user is silenced"
-      suspended_notice: "This user is suspended until {{date}}."
+      suspended_notice: "This user is suspended until %{date}."
       suspended_permanently: "This user is suspended."
       suspended_reason: "Reason: "
       github_profile: "Github"
@@ -923,7 +923,7 @@ en:
           Muted topics and categories are not included in these emails.
         individual: "Send an email for every new post"
         individual_no_echo: "Send an email for every new post except my own"
-        many_per_day: "Send me an email for every new post (about {{dailyEmailEstimate}} per day)"
+        many_per_day: "Send me an email for every new post (about %{dailyEmailEstimate} per day)"
         few_per_day: "Send me an email for every new post (about 2 per day)"
         warning: "Mailing list mode enabled. Email notification settings are overridden."
       tag_settings: "Tags"
@@ -1017,12 +1017,12 @@ en:
         disable: "Disable"
         enable: "Enable"
         enable_long: "Enable backup codes"
-        manage: "Manage backup codes. You have <strong>{{count}}</strong> backup codes remaining."
+        manage: "Manage backup codes. You have <strong>%{count}</strong> backup codes remaining."
         copy_to_clipboard: "Copy to Clipboard"
         copy_to_clipboard_error: "Error copying data to Clipboard"
         copied_to_clipboard: "Copied to Clipboard"
         download_backup_codes: "Download backup codes"
-        remaining_codes: "You have <strong>{{count}}</strong> backup codes remaining."
+        remaining_codes: "You have <strong>%{count}</strong> backup codes remaining."
         use: "Use a backup code"
         enable_prerequisites: "You must enable a primary second factor before generating backup codes."
         codes:
@@ -1092,10 +1092,10 @@ en:
 
       change_avatar:
         title: "Change your profile picture"
-        gravatar: "<a href='//{{gravatarBaseUrl}}{{gravatarLoginUrl}}' target='_blank'>{{gravatarName}}</a>, based on"
-        gravatar_title: "Change your avatar on {{gravatarName}}'s website"
-        gravatar_failed: "We could not find a {{gravatarName}} with that email address."
-        refresh_gravatar_title: "Refresh your {{gravatarName}}"
+        gravatar: "<a href='//%{gravatarBaseUrl}%{gravatarLoginUrl}' target='_blank'>%{gravatarName}</a>, based on"
+        gravatar_title: "Change your avatar on %{gravatarName}'s website"
+        gravatar_failed: "We could not find a %{gravatarName} with that email address."
+        refresh_gravatar_title: "Refresh your %{gravatarName}"
         letter_based: "System assigned profile picture"
         uploaded_avatar: "Custom picture"
         uploaded_avatar_empty: "Add a custom picture"
@@ -1124,11 +1124,11 @@ en:
         ok: "We will email you to confirm"
         required: "Please enter an email address"
         invalid: "Please enter a valid email address"
-        authenticated: "Your email has been authenticated by {{provider}}"
+        authenticated: "Your email has been authenticated by %{provider}"
         frequency_immediately: "We'll email you immediately if you haven't read the thing we're emailing you about."
         frequency:
           one: "We'll only email you if we haven't seen you in the last minute."
-          other: "We'll only email you if we haven't seen you in the last {{count}} minutes."
+          other: "We'll only email you if we haven't seen you in the last %{count} minutes."
 
       associated_accounts:
         title: "Associated Accounts"
@@ -1151,9 +1151,9 @@ en:
       username:
         title: "Username"
         instructions: "unique, no spaces, short"
-        short_instructions: "People can mention you as @{{username}}"
+        short_instructions: "People can mention you as @%{username}"
         available: "Your username is available"
-        not_available: "Not available. Try {{suggestion}}?"
+        not_available: "Not available. Try %{suggestion}?"
         not_available_no_suggestion: "Not available"
         too_short: "Your username is too short"
         too_long: "Your username is too long"
@@ -1181,11 +1181,11 @@ en:
         log_out_all: "Log out all"
         active: "active now"
         not_you: "Not you?"
-        show_all: "Show all ({{count}})"
+        show_all: "Show all (%{count})"
         show_few: "Show fewer"
         was_this_you: "Was this you?"
         was_this_you_description: "If it wasn’t you, we recommend you change your password and log out everywhere."
-        browser_and_device: "{{browser}} on {{device}}"
+        browser_and_device: "%{browser} on %{device}"
         secure_account: "Secure my Account"
         latest_post: "You last posted…"
 
@@ -1275,14 +1275,14 @@ en:
         none: "No invites to display."
         truncated:
           one: "Showing the first invite."
-          other: "Showing the first {{count}} invites."
+          other: "Showing the first %{count} invites."
         redeemed: "Redeemed Invites"
         redeemed_tab: "Redeemed"
-        redeemed_tab_with_count: "Redeemed ({{count}})"
+        redeemed_tab_with_count: "Redeemed (%{count})"
         redeemed_at: "Redeemed"
         pending: "Pending Invites"
         pending_tab: "Pending"
-        pending_tab_with_count: "Pending ({{count}})"
+        pending_tab_with_count: "Pending (%{count})"
         topics_entered: "Topics Viewed"
         posts_read_count: "Posts Read"
         expired: "This invite has expired."
@@ -1403,7 +1403,7 @@ en:
       desc:
         network: "Please check your connection."
         network_fixed: "Looks like it's back."
-        server: "Error code: {{status}}"
+        server: "Error code: %{status}"
         forbidden: "You're not allowed to view that."
         not_found: "Oops, the application tried to load a URL that doesn't exist."
         unknown: "Something went wrong."
@@ -1485,8 +1485,8 @@ en:
 
     summary:
       enabled_description: "You're viewing a summary of this topic: the most interesting posts as determined by the community."
-      description: "There are <b>{{replyCount}}</b> replies."
-      description_time: "There are <b>{{replyCount}}</b> replies with an estimated read time of <b>{{readingTime}} minutes</b>."
+      description: "There are <b>%{replyCount}</b> replies."
+      description_time: "There are <b>%{replyCount}</b> replies with an estimated read time of <b>%{readingTime} minutes</b>."
       enable: "Summarize This Topic"
       disable: "Show All Posts"
 
@@ -1501,8 +1501,8 @@ en:
       invite: "Invite Others ..."
       edit: "Add or Remove ..."
       leave_message: "Do you really want to leave this message?"
-      remove_allowed_user: "Do you really want to remove {{name}} from this message?"
-      remove_allowed_group: "Do you really want to remove {{name}} from this message?"
+      remove_allowed_user: "Do you really want to remove %{name} from this message?"
+      remove_allowed_group: "Do you really want to remove %{name} from this message?"
 
     email: "Email"
     username: "Username"
@@ -1513,7 +1513,7 @@ en:
     search_hint: "username, email or IP address"
 
     create_account:
-      disclaimer: "By registering, you agree to the <a href='{{privacy_link}}' target='blank'>privacy policy</a> and <a href='{{tos_link}}' target='blank'>terms of service</a>."
+      disclaimer: "By registering, you agree to the <a href='%{privacy_link}' target='blank'>privacy policy</a> and <a href='%{tos_link}' target='blank'>terms of service</a>."
       title: "Create New Account"
       failed: "Something went wrong, perhaps this email is already registered, try the forgot password link"
 
@@ -1577,7 +1577,7 @@ en:
       awaiting_activation: "Your account is awaiting activation, use the forgot password link to issue another activation email."
       awaiting_approval: "Your account has not been approved by a staff member yet. You will be sent an email when it is approved."
       requires_invite: "Sorry, access to this forum is by invite only."
-      not_activated: "You can't log in yet. We previously sent an activation email to you at <b>{{sentTo}}</b>. Please follow the instructions in that email to activate your account."
+      not_activated: "You can't log in yet. We previously sent an activation email to you at <b>%{sentTo}</b>. Please follow the instructions in that email to activate your account."
       not_allowed_from_ip_address: "You can't login from that IP address."
       admin_not_allowed_from_ip_address: "You can't log in as admin from that IP address."
       resend_activation_email: "Click here to send the activation email again."
@@ -1588,7 +1588,7 @@ en:
       provide_new_email: "Provide a new address and we'll resend your confirmation email."
       submit_new_email: "Update Email Address"
 
-      sent_activation_email_again: "We sent another activation email to you at <b>{{currentEmail}}</b>. It might take a few minutes for it to arrive; be sure to check your spam folder."
+      sent_activation_email_again: "We sent another activation email to you at <b>%{currentEmail}</b>. It might take a few minutes for it to arrive; be sure to check your spam folder."
       sent_activation_email_again_generic: "We sent another activation email. It might take a few minutes for it to arrive; be sure to check your spam folder."
       to_continue: "Please Log In"
       preferences: "You need to be logged in to change your user preferences."
@@ -1658,21 +1658,21 @@ en:
       loading: Loading...
 
     category_row:
-      topic_count: "{{count}} topics in this category"
+      topic_count: "%{count} topics in this category"
 
     select_kit:
       default_header_text: Select...
       no_content: No matches found
       filter_placeholder: Search...
       filter_placeholder_with_any: Search or create...
-      create: "Create: '{{content}}'"
+      create: "Create: '%{content}'"
       max_content_reached:
-        one: "You can only select {{count}} item."
-        other: "You can only select {{count}} items."
+        one: "You can only select %{count} item."
+        other: "You can only select %{count} items."
       min_content_not_reached:
-        one: "Select at least {{count}} item."
-        other: "Select at least {{count}} items."
-      invalid_selection_length: "Selection must be at least {{count}} characters."
+        one: "Select at least %{count} item."
+        other: "Select at least %{count} items."
+      invalid_selection_length: "Selection must be at least %{count} characters."
       components:
         categories_admin_dropdown:
           title: "Categories admin dropdown"
@@ -1705,7 +1705,7 @@ en:
 
     shared_drafts:
       title: "Shared Drafts"
-      notice: "This topic is only visible to those who can see the <b>{{category}}</b> category."
+      notice: "This topic is only visible to those who can see the <b>%{category}</b> category."
       destination_category: "Destination Category"
       publish: "Publish Shared Draft"
       confirm_publish: "Are you sure you want to publish this draft?"
@@ -1728,25 +1728,25 @@ en:
       drafts_offline: "drafts offline"
       edit_conflict: "edit conflict"
 
-      group_mentioned_limit: "<b>Warning!</b> You mentioned <a href='{{group_link}}'>{{group}}</a>, however this group has more members than the administrator configured mention limit of {{max}} users. Nobody will be notified."
+      group_mentioned_limit: "<b>Warning!</b> You mentioned <a href='%{group_link}'>%{group}</a>, however this group has more members than the administrator configured mention limit of %{max} users. Nobody will be notified."
       group_mentioned:
-        one: "By mentioning {{group}}, you are about to notify <a href='{{group_link}}'>%{count} person</a> – are you sure?"
-        other: "By mentioning {{group}}, you are about to notify <a href='{{group_link}}'>{{count}} people</a> – are you sure?"
+        one: "By mentioning %{group}, you are about to notify <a href='%{group_link}'>%{count} person</a> – are you sure?"
+        other: "By mentioning %{group}, you are about to notify <a href='%{group_link}'>%{count} people</a> – are you sure?"
       cannot_see_mention:
-        category: "You mentioned {{username}} but they won't be notified because they do not have access to this category. You will need to add them to a group that has access to this category."
-        private: "You mentioned {{username}} but they won't be notified because they are unable to see this personal message. You will need to invite them to this PM."
-      duplicate_link: "It looks like your link to <b>{{domain}}</b> was already posted in the topic by <b>@{{username}}</b> in <a href='{{post_url}}'>a reply on {{ago}}</a> – are you sure you want to post it again?"
-      reference_topic_title: "RE: {{title}}"
+        category: "You mentioned %{username} but they won't be notified because they do not have access to this category. You will need to add them to a group that has access to this category."
+        private: "You mentioned %{username} but they won't be notified because they are unable to see this personal message. You will need to invite them to this PM."
+      duplicate_link: "It looks like your link to <b>%{domain}</b> was already posted in the topic by <b>@%{username}</b> in <a href='%{post_url}'>a reply on %{ago}</a> – are you sure you want to post it again?"
+      reference_topic_title: "RE: %{title}"
 
       error:
         title_missing: "Title is required"
-        title_too_short: "Title must be at least {{min}} characters"
-        title_too_long: "Title can't be more than {{max}} characters"
+        title_too_short: "Title must be at least %{min} characters"
+        title_too_long: "Title can't be more than %{max} characters"
         post_missing: "Post can’t be empty"
-        post_length: "Post must be at least {{min}} characters"
-        try_like: "Have you tried the {{heart}} button?"
+        post_length: "Post must be at least %{min} characters"
+        try_like: "Have you tried the %{heart} button?"
         category_missing: "You must choose a category"
-        tags_missing: "You must choose at least {{count}} tags"
+        tags_missing: "You must choose at least %{count} tags"
         topic_template_not_modified: "Please add details and specifics to your topic by editing the topic template."
 
       save_edit: "Save Edit"
@@ -1850,10 +1850,10 @@ en:
       tooltip:
         regular:
           one: "%{count} unseen notification"
-          other: "{{count}} unseen notifications"
+          other: "%{count} unseen notifications"
         message:
           one: "%{count} unread message"
-          other: "{{count}} unread messages"
+          other: "%{count} unread messages"
         high_priority:
           one: "%{count} unread high priority notification"
           other: "%{count} unread high priority notifications"
@@ -1862,50 +1862,50 @@ en:
       empty: "No notifications found."
       post_approved: "Your post was approved"
       reviewable_items: "items requiring review"
-      mentioned: "<span>{{username}}</span> {{description}}"
-      group_mentioned: "<span>{{username}}</span> {{description}}"
-      quoted: "<span>{{username}}</span> {{description}}"
-      bookmark_reminder: "<span>{{username}}</span> {{description}}"
-      replied: "<span>{{username}}</span> {{description}}"
-      posted: "<span>{{username}}</span> {{description}}"
-      edited: "<span>{{username}}</span> {{description}}"
-      liked: "<span>{{username}}</span> {{description}}"
-      liked_2: "<span>{{username}}, {{username2}}</span> {{description}}"
+      mentioned: "<span>%{username}</span> %{description}"
+      group_mentioned: "<span>%{username}</span> %{description}"
+      quoted: "<span>%{username}</span> %{description}"
+      bookmark_reminder: "<span>%{username}</span> %{description}"
+      replied: "<span>%{username}</span> %{description}"
+      posted: "<span>%{username}</span> %{description}"
+      edited: "<span>%{username}</span> %{description}"
+      liked: "<span>%{username}</span> %{description}"
+      liked_2: "<span>%{username}, %{username2}</span> %{description}"
       liked_many:
-        one: "<span>{{username}}, {{username2}} and %{count} other</span> {{description}}"
-        other: "<span>{{username}}, {{username2}} and {{count}} others</span> {{description}}"
+        one: "<span>%{username}, %{username2} and %{count} other</span> %{description}"
+        other: "<span>%{username}, %{username2} and %{count} others</span> %{description}"
       liked_consolidated_description:
-        one: "liked {{count}} of your posts"
-        other: "liked {{count}} of your posts"
-      liked_consolidated: "<span>{{username}}</span> {{description}}"
-      private_message: "<span>{{username}}</span> {{description}}"
-      invited_to_private_message: "<p><span>{{username}}</span> {{description}}"
-      invited_to_topic: "<span>{{username}}</span> {{description}}"
-      invitee_accepted: "<span>{{username}}</span> accepted your invitation"
-      moved_post: "<span>{{username}}</span> moved {{description}}"
-      linked: "<span>{{username}}</span> {{description}}"
-      granted_badge: "Earned '{{description}}'"
-      topic_reminder: "<span>{{username}}</span> {{description}}"
-      watching_first_post: "<span>New Topic</span> {{description}}"
-      membership_request_accepted: "Membership accepted in '{{group_name}}'"
-      membership_request_consolidated: "{{count}} open membership requests for '{{group_name}}'"
+        one: "liked %{count} of your posts"
+        other: "liked %{count} of your posts"
+      liked_consolidated: "<span>%{username}</span> %{description}"
+      private_message: "<span>%{username}</span> %{description}"
+      invited_to_private_message: "<p><span>%{username}</span> %{description}"
+      invited_to_topic: "<span>%{username}</span> %{description}"
+      invitee_accepted: "<span>%{username}</span> accepted your invitation"
+      moved_post: "<span>%{username}</span> moved %{description}"
+      linked: "<span>%{username}</span> %{description}"
+      granted_badge: "Earned '%{description}'"
+      topic_reminder: "<span>%{username}</span> %{description}"
+      watching_first_post: "<span>New Topic</span> %{description}"
+      membership_request_accepted: "Membership accepted in '%{group_name}'"
+      membership_request_consolidated: "%{count} open membership requests for '%{group_name}'"
 
       group_message_summary:
-        one: "{{count}} message in your {{group_name}} inbox"
-        other: "{{count}} messages in your {{group_name}} inbox"
+        one: "%{count} message in your %{group_name} inbox"
+        other: "%{count} messages in your %{group_name} inbox"
 
       popup:
-        mentioned: '{{username}} mentioned you in "{{topic}}" - {{site_title}}'
-        group_mentioned: '{{username}} mentioned you in "{{topic}}" - {{site_title}}'
-        quoted: '{{username}} quoted you in "{{topic}}" - {{site_title}}'
-        replied: '{{username}} replied to you in "{{topic}}" - {{site_title}}'
-        posted: '{{username}} posted in "{{topic}}" - {{site_title}}'
-        private_message: '{{username}} sent you a personal message in "{{topic}}" - {{site_title}}'
-        linked: '{{username}} linked to your post from "{{topic}}" - {{site_title}}'
-        watching_first_post: '{{username}} created a new topic "{{topic}}" - {{site_title}}'
+        mentioned: '%{username} mentioned you in "%{topic}" - %{site_title}'
+        group_mentioned: '%{username} mentioned you in "%{topic}" - %{site_title}'
+        quoted: '%{username} quoted you in "%{topic}" - %{site_title}'
+        replied: '%{username} replied to you in "%{topic}" - %{site_title}'
+        posted: '%{username} posted in "%{topic}" - %{site_title}'
+        private_message: '%{username} sent you a personal message in "%{topic}" - %{site_title}'
+        linked: '%{username} linked to your post from "%{topic}" - %{site_title}'
+        watching_first_post: '%{username} created a new topic "%{topic}" - %{site_title}'
         confirm_title: "Notifications enabled - %{site_title}"
         confirm_body: "Success! Notifications have been enabled."
-        custom: "Notification from {{username}} on %{site_title}"
+        custom: "Notification from %{username} on %{site_title}"
 
       titles:
         mentioned: "mentioned"
@@ -1937,9 +1937,9 @@ en:
       from_my_computer: "From my device"
       from_the_web: "From the web"
       remote_tip: "link to image"
-      remote_tip_with_attachments: "link to image or file {{authorized_extensions}}"
+      remote_tip_with_attachments: "link to image or file %{authorized_extensions}"
       local_tip: "select images from your device"
-      local_tip_with_attachments: "select images or files from your device {{authorized_extensions}}"
+      local_tip_with_attachments: "select images or files from your device %{authorized_extensions}"
       hint: "(you can also drag & drop into the editor to upload them)"
       hint_for_supported_browsers: "you can also drag and drop or paste images into the editor"
       uploading: "Uploading"
@@ -1957,15 +1957,15 @@ en:
       clear_all: "Clear All"
       too_short: "Your search term is too short."
       result_count:
-        one: "<span>%{count} result for</span><span class='term'>{{term}}</span>"
-        other: "<span>{{count}}{{plus}} results for</span><span class='term'>{{term}}</span>"
+        one: "<span>%{count} result for</span><span class='term'>%{term}</span>"
+        other: "<span>%{count}%{plus} results for</span><span class='term'>%{term}</span>"
       title: "search topics, posts, users, or categories"
       full_page_title: "search topics or posts"
       no_results: "No results found."
       no_more_results: "No more results found."
       searching: "Searching ..."
-      post_format: "#{{post_number}} by {{username}}"
-      results_page: "Search results for '{{term}}'"
+      post_format: "#%{post_number} by %{username}"
+      results_page: "Search results for '%{term}'"
       more_results: "There are more results. Please narrow your search criteria."
       cant_find: "Can’t find what you’re looking for?"
       start_new_topic: "Perhaps start a new topic?"
@@ -1975,9 +1975,9 @@ en:
       search_google_title: "Search this site"
 
       context:
-        user: "Search posts by @{{username}}"
-        category: "Search the #{{category}} category"
-        tag: "Search the #{{tag}} tag"
+        user: "Search posts by @%{username}"
+        category: "Search the #%{category} category"
+        tag: "Search the #%{tag} tag"
         topic: "Search this topic"
         private_messages: "Search messages"
 
@@ -2057,7 +2057,7 @@ en:
         choose_new_category: "Choose the new category for the topics:"
         selected:
           one: "You have selected <b>%{count}</b> topic."
-          other: "You have selected <b>{{count}}</b> topics."
+          other: "You have selected <b>%{count}</b> topics."
         change_tags: "Replace Tags"
         append_tags: "Append Tags"
         choose_new_tags: "Choose new tags for these topics:"
@@ -2071,7 +2071,7 @@ en:
         posted: "You haven't posted in any topics yet."
         latest: "There are no latest topics. That's sad."
         bookmarks: "You have no bookmarked topics yet."
-        category: "There are no {{category}} topics."
+        category: "There are no %{category} topics."
         top: "There are no top topics."
         educate:
           new: '<p>Your new topics appear here.</p><p>By default, topics are considered new and will show a <span class="badge new-topic badge-notification" style="vertical-align:middle;line-height:inherit;">new</span> indicator if they were created in the last 2 days.</p><p>Visit your <a href="%{userPrefsUrl}">preferences</a> to change this.</p>'
@@ -2082,14 +2082,14 @@ en:
         read: "There are no more read topics."
         new: "There are no more new topics."
         unread: "There are no more unread topics."
-        category: "There are no more {{category}} topics."
+        category: "There are no more %{category} topics."
         top: "There are no more top topics."
         bookmarks: "There are no more bookmarked topics."
 
     topic:
       filter_to:
         one: "%{count} post in topic"
-        other: "{{count}} posts in topic"
+        other: "%{count} posts in topic"
       create: "New Topic"
       create_long: "Create a new Topic"
       open_draft: "Open Draft"
@@ -2119,10 +2119,10 @@ en:
       unread: "unread"
       new_topics:
         one: "%{count} new topic"
-        other: "{{count}} new topics"
+        other: "%{count} new topics"
       unread_topics:
         one: "%{count} unread topic"
-        other: "{{count}} unread topics"
+        other: "%{count} unread topics"
       title: "Topic"
       invalid_access:
         title: "Topic is private"
@@ -2136,24 +2136,24 @@ en:
         description: "Sorry, we couldn't find that topic. Perhaps it was removed by a moderator?"
       total_unread_posts:
         one: "you have %{count} unread post in this topic"
-        other: "you have {{count}} unread posts in this topic"
+        other: "you have %{count} unread posts in this topic"
       unread_posts:
         one: "you have %{count} unread old post in this topic"
-        other: "you have {{count}} unread old posts in this topic"
+        other: "you have %{count} unread old posts in this topic"
       new_posts:
         one: "there is %{count} new post in this topic since you last read it"
-        other: "there are {{count}} new posts in this topic since you last read it"
+        other: "there are %{count} new posts in this topic since you last read it"
       likes:
         one: "there is %{count} like in this topic"
-        other: "there are {{count}} likes in this topic"
+        other: "there are %{count} likes in this topic"
       back_to_list: "Back to Topic List"
       options: "Topic Options"
       show_links: "show links within this topic"
       toggle_information: "toggle topic details"
-      read_more_in_category: "Want to read more? Browse other topics in {{catLink}} or {{latestLink}}."
-      read_more: "Want to read more? {{catLink}} or {{latestLink}}."
-      group_request: "You need to request membership to the `{{name}}` group to see this topic"
-      group_join: "You need join the `{{name}}` group to see this topic"
+      read_more_in_category: "Want to read more? Browse other topics in %{catLink} or %{latestLink}."
+      read_more: "Want to read more? %{catLink} or %{latestLink}."
+      group_request: "You need to request membership to the `%{name}` group to see this topic"
+      group_join: "You need join the `%{name}` group to see this topic"
       group_request_sent: "Your group membership request has been sent. You will be informed when it's accepted."
       unread_indicator: "No member has read the last post of this topic yet."
 
@@ -2171,7 +2171,7 @@ en:
         =0 {}
         one { {BOTH, select, true{and } false {is } other{}} <a href='{basePath}/new'>1 new</a> topic}
         other { {BOTH, select, true{and } false {are } other{}} <a href='{basePath}/new'># new</a> topics}
-        } remaining, or {CATEGORY, select, true {browse other topics in {catLink}} false {{latestLink}} other {}}"
+        } remaining, or {CATEGORY, select, true {browse other topics in {catLink}} false %{latestLink} other {}}"
 
       bumped_at_title_MF: "{FIRST_POST}: {CREATED_AT}\n{LAST_POST}: {BUMPED_AT}"
 
@@ -2280,7 +2280,7 @@ en:
           "2_8": "You will see a count of new replies because you are tracking this category."
           "2_4": "You will see a count of new replies because you posted a reply to this topic."
           "2_2": "You will see a count of new replies because you are tracking this topic."
-          "2": 'You will see a count of new replies because you <a href="{{basePath}}/u/{{username}}/preferences/notifications">read this topic</a>.'
+          "2": 'You will see a count of new replies because you <a href="%{basePath}/u/%{username}/preferences/notifications">read this topic</a>.'
           "1_2": "You will be notified if someone mentions your @name or replies to you."
           "1": "You will be notified if someone mentions your @name or replies to you."
           "0_7": "You are ignoring all notifications in this category."
@@ -2364,25 +2364,25 @@ en:
 
       feature_topic:
         title: "Feature this topic"
-        pin: "Make this topic appear at the top of the {{categoryLink}} category until"
-        confirm_pin: "You already have {{count}} pinned topics. Too many pinned topics may be a burden for new and anonymous users. Are you sure you want to pin another topic in this category?"
-        unpin: "Remove this topic from the top of the {{categoryLink}} category."
-        unpin_until: "Remove this topic from the top of the {{categoryLink}} category or wait until <strong>%{until}</strong>."
+        pin: "Make this topic appear at the top of the %{categoryLink} category until"
+        confirm_pin: "You already have %{count} pinned topics. Too many pinned topics may be a burden for new and anonymous users. Are you sure you want to pin another topic in this category?"
+        unpin: "Remove this topic from the top of the %{categoryLink} category."
+        unpin_until: "Remove this topic from the top of the %{categoryLink} category or wait until <strong>%{until}</strong>."
         pin_note: "Users can unpin the topic individually for themselves."
         pin_validation: "A date is required to pin this topic."
-        not_pinned: "There are no topics pinned in {{categoryLink}}."
+        not_pinned: "There are no topics pinned in %{categoryLink}."
         already_pinned:
-          one: "Topics currently pinned in {{categoryLink}}: <strong class='badge badge-notification unread'>%{count}</strong>"
-          other: "Topics currently pinned in {{categoryLink}}: <strong class='badge badge-notification unread'>{{count}}</strong>"
+          one: "Topics currently pinned in %{categoryLink}: <strong class='badge badge-notification unread'>%{count}</strong>"
+          other: "Topics currently pinned in %{categoryLink}: <strong class='badge badge-notification unread'>%{count}</strong>"
         pin_globally: "Make this topic appear at the top of all topic lists until"
-        confirm_pin_globally: "You already have {{count}} globally pinned topics. Too many pinned topics may be a burden for new and anonymous users. Are you sure you want to pin another topic globally?"
+        confirm_pin_globally: "You already have %{count} globally pinned topics. Too many pinned topics may be a burden for new and anonymous users. Are you sure you want to pin another topic globally?"
         unpin_globally: "Remove this topic from the top of all topic lists."
         unpin_globally_until: "Remove this topic from the top of all topic lists or wait until <strong>%{until}</strong>."
         global_pin_note: "Users can unpin the topic individually for themselves."
         not_pinned_globally: "There are no topics pinned globally."
         already_pinned_globally:
           one: "Topics currently pinned globally: <strong class='badge badge-notification unread'>%{count}</strong>"
-          other: "Topics currently pinned globally: <strong class='badge badge-notification unread'>{{count}}</strong>"
+          other: "Topics currently pinned globally: <strong class='badge badge-notification unread'>%{count}</strong>"
         make_banner: "Make this topic into a banner that appears at the top of all pages."
         remove_banner: "Remove the banner that appears at the top of all pages."
         banner_note: "Users can dismiss the banner by closing it. Only one topic can be bannered at any given time."
@@ -2417,17 +2417,17 @@ en:
         to_username: "Enter the username of the person you'd like to invite. We'll send a notification with a link inviting them to this topic."
 
         email_placeholder: "name@example.com"
-        success_email: "We mailed out an invitation to <b>{{emailOrUsername}}</b>. We'll notify you when the invitation is redeemed. Check the invitations tab on your user page to keep track of your invites."
+        success_email: "We mailed out an invitation to <b>%{emailOrUsername}</b>. We'll notify you when the invitation is redeemed. Check the invitations tab on your user page to keep track of your invites."
         success_username: "We've invited that user to participate in this topic."
         error: "Sorry, we couldn't invite that person. Perhaps they have already been invited? (Invites are rate limited)"
-        success_existing_email: "A user with email <b>{{emailOrUsername}}</b> already exists. We've invited that user to participate in this topic."
+        success_existing_email: "A user with email <b>%{emailOrUsername}</b> already exists. We've invited that user to participate in this topic."
 
       login_reply: "Log In to Reply"
 
       filters:
         n_posts:
           one: "%{count} post"
-          other: "{{count}} posts"
+          other: "%{count} posts"
         cancel: "Remove filter"
 
       move_to:
@@ -2443,7 +2443,7 @@ en:
         error: "There was an error moving posts to the new topic."
         instructions:
           one: "You are about to create a new topic and populate it with the post you've selected."
-          other: "You are about to create a new topic and populate it with the <b>{{count}}</b> posts you've selected."
+          other: "You are about to create a new topic and populate it with the <b>%{count}</b> posts you've selected."
 
       merge_topic:
         title: "Move to Existing Topic"
@@ -2452,7 +2452,7 @@ en:
         radio_label: "Existing Topic"
         instructions:
           one: "Please choose the topic you'd like to move that post to."
-          other: "Please choose the topic you'd like to move those <b>{{count}}</b> posts to."
+          other: "Please choose the topic you'd like to move those <b>%{count}</b> posts to."
 
       move_to_new_message:
         title: "Move to New Message"
@@ -2462,7 +2462,7 @@ en:
         participants: "Participants"
         instructions:
           one: "You are about to create a new message and populate it with the post you've selected."
-          other: "You are about to create a new message and populate it with the <b>{{count}}</b> posts you've selected."
+          other: "You are about to create a new message and populate it with the <b>%{count}</b> posts you've selected."
 
       move_to_existing_message:
         title: "Move to Existing Message"
@@ -2471,7 +2471,7 @@ en:
         participants: "Participants"
         instructions:
           one: "Please choose the message you'd like to move that post to."
-          other: "Please choose the message you'd like to move those <b>{{count}}</b> posts to."
+          other: "Please choose the message you'd like to move those <b>%{count}</b> posts to."
 
       merge_posts:
         title: "Merge Selected Posts"
@@ -2497,11 +2497,11 @@ en:
         error: "There was an error changing the ownership of the posts."
         placeholder: "username of new owner"
         instructions:
-          one: "Please choose a new owner for the post by <b>@{{old_user}}</b>"
-          other: "Please choose a new owner for the {{count}} posts by <b>@{{old_user}}</b>"
+          one: "Please choose a new owner for the post by <b>@%{old_user}</b>"
+          other: "Please choose a new owner for the %{count} posts by <b>@%{old_user}</b>"
         instructions_without_old_user:
           one: "Please choose a new owner for the post"
-          other: "Please choose a new owner for the {{count}} posts"
+          other: "Please choose a new owner for the %{count} posts"
 
       change_timestamp:
         title: "Change Timestamp..."
@@ -2512,7 +2512,7 @@ en:
 
       multi_select:
         select: "select"
-        selected: "selected ({{count}})"
+        selected: "selected (%{count})"
         select_post:
           label: "select"
           title: "Add post to selection"
@@ -2531,7 +2531,7 @@ en:
         deselect_all: deselect all
         description:
           one: You have selected <b>%{count}</b> post.
-          other: "You have selected <b>{{count}}</b> posts."
+          other: "You have selected <b>%{count}</b> posts."
 
       deleted_by_author:
         one: "(topic withdrawn by author, will be automatically deleted in %{count} hour unless flagged)"
@@ -2540,13 +2540,13 @@ en:
     post:
       quote_reply: "Quote"
       edit_reason: "Reason: "
-      post_number: "post {{number}}"
+      post_number: "post %{number}"
       ignored: "Ignored content"
       wiki_last_edited_on: "wiki last edited on"
       last_edited_on: "post last edited on"
       reply_as_new_topic: "Reply as linked Topic"
       reply_as_new_private_message: "Reply as new message to the same recipients"
-      continue_discussion: "Continuing the discussion from {{postLink}}:"
+      continue_discussion: "Continuing the discussion from %{postLink}:"
       follow_quote: "go to the quoted post"
       show_full: "Show Full Post"
       show_hidden: "View ignored content."
@@ -2558,34 +2558,34 @@ en:
       locked: "a staff member has locked this post from being edited"
       gap:
         one: "view %{count} hidden reply"
-        other: "view {{count}} hidden replies"
+        other: "view %{count} hidden replies"
 
       notice:
-        new_user: "This is the first time {{user}} has posted — let’s welcome them to our community!"
-        returning_user: "It’s been a while since we’ve seen {{user}} — their last post was {{time}}."
+        new_user: "This is the first time %{user} has posted — let’s welcome them to our community!"
+        returning_user: "It’s been a while since we’ve seen %{user} — their last post was %{time}."
 
       unread: "Post is unread"
       has_replies:
-        one: "{{count}} Reply"
-        other: "{{count}} Replies"
+        one: "%{count} Reply"
+        other: "%{count} Replies"
 
       has_likes_title:
         one: "%{count} person liked this post"
-        other: "{{count}} people liked this post"
+        other: "%{count} people liked this post"
 
       has_likes_title_only_you: "you liked this post"
       has_likes_title_you:
         one: "you and %{count} other person liked this post"
-        other: "you and {{count}} other people liked this post"
+        other: "you and %{count} other people liked this post"
 
       errors:
         create: "Sorry, there was an error creating your post. Please try again."
         edit: "Sorry, there was an error editing your post. Please try again."
         upload: "Sorry, there was an error uploading that file. Please try again."
-        file_too_large: "Sorry, that file is too big (maximum size is {{max_size_kb}}kb). Why not upload your large file to a cloud sharing service, then paste the link?"
+        file_too_large: "Sorry, that file is too big (maximum size is %{max_size_kb}kb). Why not upload your large file to a cloud sharing service, then paste the link?"
         too_many_uploads: "Sorry, you can only upload one file at a time."
-        too_many_dragged_and_dropped_files: "Sorry, you can only upload {{max}} files at a time."
-        upload_not_authorized: "Sorry, the file you are trying to upload is not authorized (authorized extensions: {{authorized_extensions}})."
+        too_many_dragged_and_dropped_files: "Sorry, you can only upload %{max} files at a time."
+        upload_not_authorized: "Sorry, the file you are trying to upload is not authorized (authorized extensions: %{authorized_extensions})."
         image_upload_not_allowed_for_new_user: "Sorry, new users can not upload images."
         attachment_upload_not_allowed_for_new_user: "Sorry, new users can not upload attachments."
         attachment_download_requires_login: "Sorry, you need to be logged in to download attachments."
@@ -2632,10 +2632,10 @@ en:
           confirm: "Do you also want to delete the replies to this post?"
           direct_replies:
             one: "Yes, and %{count} direct reply"
-            other: "Yes, and {{count}} direct replies"
+            other: "Yes, and %{count} direct replies"
           all_replies:
             one: "Yes, and %{count} reply"
-            other: "Yes, and all {{count}} replies"
+            other: "Yes, and all %{count} replies"
           just_the_post: "No, just this post"
         admin: "post admin actions"
         wiki: "Make Wiki"
@@ -2683,11 +2683,11 @@ en:
             one: "read this"
             other: "read this"
           like_capped:
-            one: "and {{count}} other liked this"
-            other: "and {{count}} others liked this"
+            one: "and %{count} other liked this"
+            other: "and %{count} others liked this"
           read_capped:
-            one: "and {{count}} other read this"
-            other: "and {{count}} others read this"
+            one: "and %{count} other read this"
+            other: "and %{count} others read this"
         by_you:
           off_topic: "You flagged this as off-topic"
           spam: "You flagged this as spam"
@@ -2700,12 +2700,12 @@ en:
       delete:
         confirm:
           one: "Are you sure you want to delete that post?"
-          other: "Are you sure you want to delete those {{count}} posts?"
+          other: "Are you sure you want to delete those %{count} posts?"
 
       merge:
         confirm:
           one: "Are you sure you want to merge those posts?"
-          other: "Are you sure you want to merge those {{count}} posts?"
+          other: "Are you sure you want to merge those %{count} posts?"
 
       revisions:
         controls:
@@ -2718,7 +2718,7 @@ en:
           revert: "Revert to this revision"
           edit_wiki: "Edit Wiki"
           edit_post: "Edit Post"
-          comparing_previous_to_current_out_of_total: "<strong>{{previous}}</strong> {{icon}} <strong>{{current}}</strong> / {{total}}"
+          comparing_previous_to_current_out_of_total: "<strong>%{previous}</strong> %{icon} <strong>%{current}</strong> / %{total}"
         displays:
           inline:
             title: "Show the rendered output with additions and removals inline"
@@ -2915,13 +2915,13 @@ en:
       custom_message:
         at_least:
           one: "enter at least %{count} character"
-          other: "enter at least {{count}} characters"
+          other: "enter at least %{count} characters"
         more:
           one: "%{count} to go..."
-          other: "{{count}} to go..."
+          other: "%{count} to go..."
         left:
           one: "%{count} remaining"
-          other: "{{count}} remaining"
+          other: "%{count} remaining"
 
     flagging_topic:
       title: "Thanks for helping to keep our community civil!"
@@ -2968,7 +2968,7 @@ en:
         title: "This topic is a personal message"
         help: "This topic is a personal message"
     posts: "Posts"
-    posts_long: "there are {{number}} posts in this topic"
+    posts_long: "there are %{number} posts in this topic"
 
     # keys ending with _MF use message format, see https://meta.discourse.org/t/message-format-support-for-localization/7035 for details
     posts_likes_MF: |
@@ -2985,20 +2985,20 @@ en:
     replies: "Replies"
     views_long:
       one: "this topic has been viewed %{count} time"
-      other: "this topic has been viewed {{number}} times"
+      other: "this topic has been viewed %{number} times"
     activity: "Activity"
     likes: "Likes"
     likes_lowercase:
       one: "like"
       other: "likes"
-    likes_long: "there are {{number}} likes in this topic"
+    likes_long: "there are %{number} likes in this topic"
     users: "Users"
     users_lowercase:
       one: "user"
       other: "users"
     category_title: "Category"
     history: "History"
-    changed_by: "by {{author}}"
+    changed_by: "by %{author}"
 
     raw_email:
       title: "Incoming Email"
@@ -3013,33 +3013,33 @@ en:
         title: "Latest"
         title_with_count:
           one: "Latest (%{count})"
-          other: "Latest ({{count}})"
+          other: "Latest (%{count})"
         help: "topics with recent posts"
       read:
         title: "Read"
         help: "topics you've read, in the order that you last read them"
       categories:
         title: "Categories"
-        title_in: "Category - {{categoryName}}"
+        title_in: "Category - %{categoryName}"
         help: "all topics grouped by category"
       unread:
         title: "Unread"
         title_with_count:
           one: "Unread (%{count})"
-          other: "Unread ({{count}})"
+          other: "Unread (%{count})"
         help: "topics you are currently watching or tracking with unread posts"
         lower_title_with_count:
           one: "%{count} unread"
-          other: "{{count}} unread"
+          other: "%{count} unread"
       new:
         lower_title_with_count:
           one: "%{count} new"
-          other: "{{count}} new"
+          other: "%{count} new"
         lower_title: "new"
         title: "New"
         title_with_count:
           one: "New (%{count})"
-          other: "New ({{count}})"
+          other: "New (%{count})"
         help: "topics created in the last few days"
       posted:
         title: "My Posts"
@@ -3048,11 +3048,11 @@ en:
         title: "Bookmarks"
         help: "topics you have bookmarked"
       category:
-        title: "{{categoryName}}"
+        title: "%{categoryName}"
         title_with_count:
-          one: "{{categoryName}} (%{count})"
-          other: "{{categoryName}} ({{count}})"
-        help: "latest topics in the {{categoryName}} category"
+          one: "%{categoryName} (%{count})"
+          other: "%{categoryName} (%{count})"
+        help: "latest topics in the %{categoryName} category"
       top:
         title: "Top"
         help: "the most active topics in the last year, month, week or day"
@@ -3222,8 +3222,8 @@ en:
       synonyms: "Synonyms"
       synonyms_description: "When the following tags are used, they will be replaced with <b>%{base_tag_name}</b>."
       tag_groups_info:
-        one: 'This tag belongs to the group "{{tag_groups}}".'
-        other: "This tag belongs to these groups: {{tag_groups}}."
+        one: 'This tag belongs to the group "%{tag_groups}".'
+        other: "This tag belongs to these groups: %{tag_groups}."
       category_restrictions:
         one: "It can only be used in this category:"
         other: "It can only be used in these categories:"
@@ -3239,11 +3239,11 @@ en:
       delete_tag: "Delete Tag"
       delete_confirm:
         one: "Are you sure you want to delete this tag and remove it from %{count} topic it is assigned to?"
-        other: "Are you sure you want to delete this tag and remove it from {{count}} topics it is assigned to?"
+        other: "Are you sure you want to delete this tag and remove it from %{count} topics it is assigned to?"
       delete_confirm_no_topics: "Are you sure you want to delete this tag?"
       delete_confirm_synonyms:
         one: "Its synonym will also be deleted."
-        other: "Its {{count}} synonyms will also be deleted."
+        other: "Its %{count} synonyms will also be deleted."
       rename_tag: "Rename Tag"
       rename_instructions: "Choose a new name for the tag:"
       sort_by: "Sort by:"
@@ -3620,10 +3620,10 @@ en:
           redeliver: "Redeliver"
           incoming:
             one: "There is a new event."
-            other: "There are {{count}} new events."
+            other: "There are %{count} new events."
           completed_in:
             one: "Completed in %{count} second."
-            other: "Completed in {{count}} seconds."
+            other: "Completed in %{count} seconds."
           request: "Request"
           response: "Response"
           redeliver_confirm: "Are you sure you want to redeliver the same payload?"
@@ -3676,12 +3676,12 @@ en:
           label: "Upload"
           title: "Upload a backup to this instance"
           uploading: "Uploading..."
-          uploading_progress: "Uploading... {{progress}}%"
-          success: "'{{filename}}' has successfully been uploaded. The file is now being processed and will take up to a minute to show up in the list."
-          error: "There has been an error while uploading '{{filename}}': {{message}}"
+          uploading_progress: "Uploading... %{progress}%"
+          success: "'%{filename}' has successfully been uploaded. The file is now being processed and will take up to a minute to show up in the list."
+          error: "There has been an error while uploading '%{filename}': %{message}"
         operations:
           is_running: "An operation is currently running..."
-          failed: "The {{operation}} failed. Please check the logs."
+          failed: "The %{operation} failed. Please check the logs."
           cancel:
             label: "Cancel"
             title: "Cancel the current operation"
@@ -3808,7 +3808,7 @@ en:
           disabled_component_tooltip: "This component has been disabled"
           default_theme_tooltip: "This theme is the site's default theme"
           updates_available_tooltip: "Updates are available for this theme"
-          and_x_more: "and {{count}} more."
+          and_x_more: "and %{count} more."
           collapse: Collapse
           uploads: "Uploads"
           no_uploads: "You can upload assets associated with your theme such as fonts and images"
@@ -3857,8 +3857,8 @@ en:
           disabled_by: "This component has been disabled by"
           required_version:
             error: "This theme has been automatically disabled because it is not compatible with this version of Discourse."
-            minimum: "Requires Discourse version {{version}} or above."
-            maximum: "Requires Discourse version {{version}} or below."
+            minimum: "Requires Discourse version %{version} or above."
+            maximum: "Requires Discourse version %{version} or below."
           component_of: "Component of:"
           update_to_latest: "Update to Latest"
           check_for_updates: "Check for Updates"
@@ -3871,7 +3871,7 @@ en:
           empty: "No items"
           commits_behind:
             one: "Theme is %{count} commit behind!"
-            other: "Theme is {{count}} commits behind!"
+            other: "Theme is %{count} commits behind!"
           compare_commits: "(See new commits)"
           repo_unreachable: "Couldn't contact the Git repository of this theme. Error message:"
           imported_from_archive: "This theme was imported from a .zip file"
@@ -4283,8 +4283,8 @@ en:
           text: "Show"
 
       user:
-        suspend_failed: "Something went wrong suspending this user {{error}}"
-        unsuspend_failed: "Something went wrong unsuspending this user {{error}}"
+        suspend_failed: "Something went wrong suspending this user %{error}"
+        unsuspend_failed: "Something went wrong unsuspending this user %{error}"
         suspend_duration: "How long will the user be suspended for?"
         suspend_reason_label: "Why are you suspending? This text <b>will be visible to everyone</b> on this user's profile page, and will be shown to the user when they try to log in. Keep it short."
         suspend_reason_hidden_label: "Why are you suspending? This text will be shown to the user when they try to log in. Keep it short."
diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml
index 7c043dc22b4..7b564c402b8 100644
--- a/config/locales/server.en.yml
+++ b/config/locales/server.en.yml
@@ -899,7 +899,7 @@ en:
       short_description: 'A violation of <a href="%{base_path}/guidelines">our community guidelines</a>'
       long_form: "flagged this as inappropriate"
     notify_user:
-      title: "Send @{{username}} a message"
+      title: "Send @%{username} a message"
       description: "I want to talk to this person directly and personally about their post."
       short_description: "I want to talk to this person directly and personally about their post."
       long_form: "messaged user"
@@ -4826,9 +4826,9 @@ en:
     title: "Reminder about old credentials"
     body: |
       Hello! This is a routine yearly security reminder from your Discourse instance.
-      
+
       As a courtesy, we wanted to let you know that the following credentials used on your Discourse instance have not been updated in more than two years:
-      
+
       %{keys}
-      
+
       No action is required at this time, however, it is considered good security practice to cycle all your important credentials every few years.
diff --git a/spec/integrity/i18n_spec.rb b/spec/integrity/i18n_spec.rb
index 41fbe2157ff..7871a987293 100644
--- a/spec/integrity/i18n_spec.rb
+++ b/spec/integrity/i18n_spec.rb
@@ -141,13 +141,20 @@ describe "i18n integrity checks" do
       context "valid translations" do
         invalid_relative_links = {}
         invalid_relative_image_sources = {}
+        invalid_interpolation_key_format = {}
 
         each_translation(english_yaml) do |key, value|
           if value.match?(/href\s*=\s*["']\/[^\/]|\]\(\/[^\/]/i)
             invalid_relative_links[key] = value
-          elsif value.match?(/src\s*=\s*["']\/[^\/]/i)
+          end
+
+          if value.match?(/src\s*=\s*["']\/[^\/]/i)
             invalid_relative_image_sources[key] = value
           end
+
+          if value.match?(/\{\{.+?}}/)
+            invalid_interpolation_key_format[key] = value
+          end
         end
 
         it "uses %{base_url} or %{base_path} for relative links" do
@@ -159,6 +166,11 @@ describe "i18n integrity checks" do
           keys = invalid_relative_image_sources.keys.join("\n")
           expect(invalid_relative_image_sources).to be_empty, "The following keys have relative image sources, but do not start with %{base_url} or %{base_path}:\n\n#{keys}"
         end
+
+        it "uses the %{key} as interpolation key format" do
+          keys = invalid_interpolation_key_format.keys.join("\n")
+          expect(invalid_interpolation_key_format).to be_empty, "The following keys use {{key}} instead of %{key} for interpolation keys:\n\n#{keys}"
+        end
       end
     end
 
diff --git a/test/javascripts/fixtures/site-fixtures.js b/test/javascripts/fixtures/site-fixtures.js
index 875ef8f67e3..644ab219008 100644
--- a/test/javascripts/fixtures/site-fixtures.js
+++ b/test/javascripts/fixtures/site-fixtures.js
@@ -490,7 +490,7 @@ export default {
         },
         {
           name_key: "notify_user",
-          name: "Notify {{username}}",
+          name: "Notify %{username}",
           description:
             "This post contains something I want to talk to this person directly and privately about. Does not cast a flag.",
           short_description:
diff --git a/test/javascripts/helpers/site.js b/test/javascripts/helpers/site.js
index ce7ffc8825c..a1432aac5ec 100644
--- a/test/javascripts/helpers/site.js
+++ b/test/javascripts/helpers/site.js
@@ -320,7 +320,7 @@ PreloadStore.store("site", {
     },
     {
       name_key: "notify_user",
-      name: "Notify {{username}}",
+      name: "Notify %{username}",
       description:
         "This post contains something I want to talk to this person directly and privately about.",
       long_form: "notified user",