From 74ac143c3cf7443879cedc7d27c640a3ee27619a Mon Sep 17 00:00:00 2001 From: Gerhard Schlager Date: Mon, 8 Apr 2024 21:24:54 +0200 Subject: [PATCH] DEV: Correctly pluralize strings (#26565) --- config/locales/client.en.yml | 76 +++++++++++++++++++++++++++--------- config/locales/server.en.yml | 12 ++++-- 2 files changed, 66 insertions(+), 22 deletions(-) diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index f3fcac39e69..6dc5300afed 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -305,7 +305,9 @@ en: weekly: "weekly" every_month: "every month" every_six_months: "every six months" - max_of_count: "max of %{count}" + max_of_count: + one: "max of %{count}" + other: "max of %{count}" character_count: one: "%{count} character" other: "%{count} characters" @@ -1025,7 +1027,9 @@ en: image: "Upload an image" default_notifications: modal_title: "User default notifications" - modal_description: "Would you like to apply this change historically? This will change preferences for %{count} existing users." + modal_description: + one: "Would you like to apply this change historically? This will change preferences for %{count} existing user." + other: "Would you like to apply this change historically? This will change preferences for %{count} existing users." modal_yes: "Yes" modal_no: "No, only apply change going forward" @@ -1050,7 +1054,9 @@ en: all_subcategories: "all subcategories" no_subcategories: "no subcategories" remove_filter: "remove filter" - plus_more_count: "+%{count} more" + plus_more_count: + one: "+%{count} more" + other: "+%{count} more" view_all: "view all" category: "Category" category_list: "Display category list" @@ -1083,7 +1089,9 @@ en: topic_stat_sentence_month: one: "%{count} new topic in the past month." other: "%{count} new topics in the past month." - n_more: "Categories (%{count} more)…" + n_more: + one: "Categories (%{count} more)…" + other: "Categories (%{count} more)…" ip_lookup: title: IP Address Lookup @@ -1093,7 +1101,9 @@ en: organisation: Organization phone: Phone other_accounts: "Other accounts with this IP address:" - delete_other_accounts: "Delete %{count}" + delete_other_accounts: + one: "Delete %{count}" + other: "Delete %{count}" username: "username" trust_level: "TL" read_time: "read time" @@ -1903,7 +1913,9 @@ en: same_as_username: "Your password is the same as your username." same_as_email: "Your password is the same as your email." ok: "Your password looks good." - instructions: "At least %{count} characters." + instructions: + one: "At least %{count} character." + other: "At least %{count} characters." required: "Please enter a password" confirm: "Confirm" incorrect_password: "The entered password is incorrect." @@ -2455,7 +2467,9 @@ en: group_mentioned: one: "Mentioning %{group} will notify %{count} person." other: "Mentioning %{group} will notify %{count} people." - larger_group_mentioned: "Mentioning %{group} will notify %{count} people. Are you sure?" + larger_group_mentioned: + one: "Mentioning %{group} will notify %{count} person. Are you sure?" + other: "Mentioning %{group} will notify %{count} people. 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 personal message." @@ -2978,7 +2992,9 @@ en: selected: one: "You have selected %{count} topic." other: "You have selected %{count} topics." - selected_count: "%{count} selected" + selected_count: + one: "%{count} selected" + other: "%{count} selected" change_tags: "Replace Tags" append_tags: "Append Tags" choose_new_tags: "Choose new tags for these topics:" @@ -4631,23 +4647,31 @@ en: label: "Icon" validation: blank: "Icon cannot be blank" - maximum: "Icon must be shorter than %{count} characters" + maximum: + one: "Icon must be shorter than %{count} character" + other: "Icon must be shorter than %{count} characters" name: label: "Name" validation: blank: "Name cannot be blank" - maximum: "Name must be shorter than %{count} characters" + maximum: + one: "Name must be shorter than %{count} character" + other: "Name must be shorter than %{count} characters" value: label: "Link" validation: blank: "Link cannot be blank" - maximum: "Link must be shorter than %{count} characters" + maximum: + one: "Link must be shorter than %{count} character" + other: "Link must be shorter than %{count} characters" invalid: "Format is invalid" title: label: "Section title" validation: blank: "Title cannot be blank" - maximum: "Title must be shorter than %{count} characters" + maximum: + one: "Title must be shorter than %{count} character" + other: "Title must be shorter than %{count} characters" about: header_link_text: "About" messages: @@ -4710,7 +4734,9 @@ en: review: content: "Review" title: "Flagged posts and other queued items" - pending_count: "%{count} pending" + pending_count: + one: "%{count} pending" + other: "%{count} pending" global_section: "Global section, visible to everyone" panels: forum: @@ -5541,13 +5567,17 @@ en: convert_theme_tooltip: "Convert this theme to component" inactive_themes: "Inactive themes:" inactive_components: "Unused components:" - selected: "%{count} selected" + selected: + one: "%{count} selected" + other: "%{count} selected" cancel: "Cancel" broken_theme_tooltip: "This theme has errors in its CSS, HTML or YAML" 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: + one: "and %{count} more." + other: "and %{count} more." collapse: Collapse uploads: "Uploads" no_uploads: "You can upload assets associated with your theme such as fonts and images" @@ -5687,7 +5717,9 @@ en: one: "at least %{count} tag is required" other: "at least %{count} tags are required" string: - too_short: "must be at least %{count} characters" + too_short: + one: "must be at least %{count} character" + other: "must be at least %{count} characters" number: too_small: "must be greater than or equal to %{count}" too_large: "must be less than or equal to %{count}" @@ -6610,7 +6642,9 @@ en: secret_list: invalid_input: "Input fields cannot be empty or contain vertical bar character." default_categories: - modal_description: "Would you like to apply this change historically? This will change preferences for %{count} existing users." + modal_description: + one: "Would you like to apply this change historically? This will change preferences for %{count} existing user." + other: "Would you like to apply this change historically? This will change preferences for %{count} existing users." modal_yes: "Yes" modal_no: "No, only apply change going forward" simple_list: @@ -6710,9 +6744,13 @@ en: perform: "Award Badge to Users" upload_csv: Upload a CSV with either user emails or usernames aborted: Please upload a CSV containing either user emails or usernames - success: Your CSV was received and %{count} users will receive their badge shortly. + success: + one: "Your CSV was received and %{count} user will receive their badge shortly." + other: "Your CSV was received and %{count} users will receive their badge shortly." csv_has_unmatched_users: "The following entries are in the CSV file but they couldn't be matched to existing users, and therefore won't receive the badge:" - csv_has_unmatched_users_truncated_list: "There were %{count} entries in the CSV file that couldn't be matched to existing users, and therefore won't receive the badge. Due to the large number of unmatched entries, only the first 100 are shown:" + csv_has_unmatched_users_truncated_list: + one: "There was %{count} entry in the CSV file that couldn't be matched to existing users, and therefore won't receive the badge. Due to the large number of unmatched entries, only the first 100 are shown:" + other: "There were %{count} entries in the CSV file that couldn't be matched to existing users, and therefore won't receive the badge. Due to the large number of unmatched entries, only the first 100 are shown:" replace_owners: Remove the badge from previous owners grant_existing_holders: Grant additional badges to existing badge holders diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index f97b7749210..e15440c2230 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -691,7 +691,9 @@ en: dominating_topic: You’ve posted a lot in this topic! Consider giving others an opportunity to reply here and discuss things with each other as well. - get_a_room: You’ve replied to @%{reply_username} %{count} times, did you know you could send them a personal message instead? + get_a_room: + one: You’ve replied to @%{reply_username} once, did you know you could send them a personal message instead? + other: You’ve replied to @%{reply_username} %{count} times, did you know you could send them a personal message instead? dont_feed_the_trolls: This post has already been flagged for moderator attention. Are you sure you wish to reply to it? Replies to negative content tend to encourage more negative behavior. @@ -2680,7 +2682,9 @@ en: regex_invalid: "The regular expression is invalid: %{error}" leading_trailing_slash: "The regular expression must not start and end with a slash." unicode_usernames_avatars: "The internal system avatars do not support Unicode usernames." - list_value_count: "The list must contain exactly %{count} values." + list_value_count: + one: "The list must contain exactly %{count} value." + other: "The list must contain exactly %{count} values." markdown_linkify_tlds: "You cannot include a value of '*'." google_oauth2_hd_groups: "You must configure all 'google oauth2 hd' settings before enabling this setting." search_tokenize_chinese_enabled: "You must disable 'search_tokenize_chinese' before enabling this setting." @@ -4926,7 +4930,9 @@ en: mass_award: errors: invalid_csv: We encountered an error on line %{line_number}. Please confirm the CSV has one email per line. - too_many_csv_entries: Too many entries in the CSV file. Please provide a CSV file with no more than %{count} entries. + too_many_csv_entries: + one: Too many entries in the CSV file. Please provide a CSV file with no more than %{count} entry. + other: Too many entries in the CSV file. Please provide a CSV file with no more than %{count} entries. badge_disabled: Please enable the %{badge_name} badge first. cant_grant_multiple_times: Can't grant the %{badge_name} badge multiple times to a single user. editor: