DEV: Always use %{count} in pluralized strings
This commit is contained in:
parent
ca2ba22a48
commit
0afcad148a
|
@ -69,34 +69,34 @@ en:
|
|||
tiny:
|
||||
half_a_minute: "< 1m"
|
||||
less_than_x_seconds:
|
||||
one: "< 1s"
|
||||
one: "< %{count}s"
|
||||
other: "< %{count}s"
|
||||
x_seconds:
|
||||
one: "1s"
|
||||
one: "%{count}s"
|
||||
other: "%{count}s"
|
||||
less_than_x_minutes:
|
||||
one: "< 1m"
|
||||
one: "< %{count}m"
|
||||
other: "< %{count}m"
|
||||
x_minutes:
|
||||
one: "1m"
|
||||
one: "%{count}m"
|
||||
other: "%{count}m"
|
||||
about_x_hours:
|
||||
one: "1h"
|
||||
one: "%{count}h"
|
||||
other: "%{count}h"
|
||||
x_days:
|
||||
one: "1d"
|
||||
one: "%{count}d"
|
||||
other: "%{count}d"
|
||||
x_months:
|
||||
one: "1mon"
|
||||
one: "%{count}mon"
|
||||
other: "%{count}mon"
|
||||
about_x_years:
|
||||
one: "1y"
|
||||
one: "%{count}y"
|
||||
other: "%{count}y"
|
||||
over_x_years:
|
||||
one: "> 1y"
|
||||
one: "> %{count}y"
|
||||
other: "> %{count}y"
|
||||
almost_x_years:
|
||||
one: "1y"
|
||||
one: "%{count}y"
|
||||
other: "%{count}y"
|
||||
# Use Moment.js format string: https://momentjs.com/docs/#/displaying/format/
|
||||
date_month: "D MMM"
|
||||
|
@ -104,35 +104,35 @@ en:
|
|||
date_year: "MMM 'YY"
|
||||
medium:
|
||||
x_minutes:
|
||||
one: "1 min"
|
||||
one: "%{count} min"
|
||||
other: "%{count} mins"
|
||||
x_hours:
|
||||
one: "1 hour"
|
||||
one: "%{count} hour"
|
||||
other: "%{count} hours"
|
||||
x_days:
|
||||
one: "1 day"
|
||||
one: "%{count} day"
|
||||
other: "%{count} days"
|
||||
# Use Moment.js format string: https://momentjs.com/docs/#/displaying/format/
|
||||
date_year: "D MMM 'YY"
|
||||
medium_with_ago:
|
||||
x_minutes:
|
||||
one: "1 min ago"
|
||||
one: "%{count} min ago"
|
||||
other: "%{count} mins ago"
|
||||
x_hours:
|
||||
one: "1 hour ago"
|
||||
one: "%{count} hour ago"
|
||||
other: "%{count} hours ago"
|
||||
x_days:
|
||||
one: "1 day ago"
|
||||
one: "%{count} day ago"
|
||||
other: "%{count} days ago"
|
||||
later:
|
||||
x_days:
|
||||
one: "1 day later"
|
||||
one: "%{count} day later"
|
||||
other: "%{count} days later"
|
||||
x_months:
|
||||
one: "1 month later"
|
||||
one: "%{count} month later"
|
||||
other: "%{count} months later"
|
||||
x_years:
|
||||
one: "1 year later"
|
||||
one: "%{count} year later"
|
||||
other: "%{count} years later"
|
||||
previous_month: "Previous Month"
|
||||
next_month: "Next Month"
|
||||
|
@ -387,7 +387,7 @@ en:
|
|||
none: "There are no items to review."
|
||||
view_pending: "view pending"
|
||||
topic_has_pending:
|
||||
one: "This topic has <b>1</b> post pending approval"
|
||||
one: "This topic has <b>%{count}</b> post pending approval"
|
||||
other: "This topic has <b>{{count}}</b> posts pending approval"
|
||||
title: "Review"
|
||||
topic: "Topic:"
|
||||
|
@ -423,10 +423,10 @@ en:
|
|||
original: "(original topic)"
|
||||
details: "details"
|
||||
unique_users:
|
||||
one: "1 user"
|
||||
one: "%{count} user"
|
||||
other: "{{count}} users"
|
||||
replies:
|
||||
one: "1 reply"
|
||||
one: "%{count} reply"
|
||||
other: "{{count}} replies"
|
||||
edit: "Edit"
|
||||
save: "Save"
|
||||
|
@ -486,7 +486,7 @@ en:
|
|||
title: "Post Needs Approval"
|
||||
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>1</strong> post pending."
|
||||
one: "You have <strong>%{count}</strong> post pending."
|
||||
other: "You have <strong>{{count}}</strong> posts pending."
|
||||
ok: "OK"
|
||||
|
||||
|
@ -525,7 +525,7 @@ en:
|
|||
posts_read: "Read"
|
||||
posts_read_long: "Posts Read"
|
||||
total_rows:
|
||||
one: "1 user"
|
||||
one: "%{count} user"
|
||||
other: "%{count} users"
|
||||
|
||||
group_histories:
|
||||
|
@ -711,7 +711,7 @@ en:
|
|||
toggle_ordering: "toggle ordering control"
|
||||
subcategories: "Subcategories"
|
||||
topic_sentence:
|
||||
one: "1 topic"
|
||||
one: "%{count} topic"
|
||||
other: "%{count} topics"
|
||||
topic_stat_sentence_week:
|
||||
one: "%{count} new topic in the past week."
|
||||
|
@ -1274,7 +1274,7 @@ en:
|
|||
reached: "<b>%{relativeAge}</b> – <a href='%{url}' target='_blank'>%{rate}</a> reached site setting limit of %{siteSettingRate}."
|
||||
exceeded: "<b>%{relativeAge}</b> – <a href='%{url}' target='_blank'>%{rate}</a> exceeds site setting limit of %{siteSettingRate}."
|
||||
rate:
|
||||
one: "1 error/%{duration}"
|
||||
one: "%{count} error/%{duration}"
|
||||
other: "%{count} errors/%{duration}"
|
||||
|
||||
learn_more: "learn more..."
|
||||
|
@ -1534,7 +1534,7 @@ en:
|
|||
|
||||
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}}'>1 person</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."
|
||||
|
@ -1651,10 +1651,10 @@ en:
|
|||
notifications:
|
||||
tooltip:
|
||||
regular:
|
||||
one: "1 unseen notification"
|
||||
one: "%{count} unseen notification"
|
||||
other: "{{count}} unseen notifications"
|
||||
message:
|
||||
one: "1 unread message"
|
||||
one: "%{count} unread message"
|
||||
other: "{{count}} unread messages"
|
||||
title: "notifications of @name mentions, replies to your posts and topics, messages, etc"
|
||||
none: "Unable to load notifications at this time."
|
||||
|
@ -1671,7 +1671,7 @@ en:
|
|||
liked: "<span>{{username}}</span> {{description}}"
|
||||
liked_2: "<span>{{username}}, {{username2}}</span> {{description}}"
|
||||
liked_many:
|
||||
one: "<span>{{username}}, {{username2}} and 1 other</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"
|
||||
|
@ -1731,7 +1731,7 @@ en:
|
|||
clear_all: "Clear All"
|
||||
too_short: "Your search term is too short."
|
||||
result_count:
|
||||
one: "<span>1 result 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"
|
||||
|
@ -1827,7 +1827,7 @@ en:
|
|||
notification_level: "Notifications"
|
||||
choose_new_category: "Choose the new category for the topics:"
|
||||
selected:
|
||||
one: "You have selected <b>1</b> topic."
|
||||
one: "You have selected <b>%{count}</b> topic."
|
||||
other: "You have selected <b>{{count}}</b> topics."
|
||||
change_tags: "Replace Tags"
|
||||
append_tags: "Append Tags"
|
||||
|
@ -1863,7 +1863,7 @@ en:
|
|||
|
||||
topic:
|
||||
filter_to:
|
||||
one: "1 post in topic"
|
||||
one: "%{count} post in topic"
|
||||
other: "{{count}} posts in topic"
|
||||
create: "New Topic"
|
||||
create_long: "Create a new Topic"
|
||||
|
@ -1882,10 +1882,10 @@ en:
|
|||
new: "new topic"
|
||||
unread: "unread"
|
||||
new_topics:
|
||||
one: "1 new topic"
|
||||
one: "%{count} new topic"
|
||||
other: "{{count}} new topics"
|
||||
unread_topics:
|
||||
one: "1 unread topic"
|
||||
one: "%{count} unread topic"
|
||||
other: "{{count}} unread topics"
|
||||
title: "Topic"
|
||||
invalid_access:
|
||||
|
@ -1899,16 +1899,16 @@ en:
|
|||
title: "Topic not found"
|
||||
description: "Sorry, we couldn't find that topic. Perhaps it was removed by a moderator?"
|
||||
total_unread_posts:
|
||||
one: "you have 1 unread post in this topic"
|
||||
one: "you have %{count} unread post in this topic"
|
||||
other: "you have {{count}} unread posts in this topic"
|
||||
unread_posts:
|
||||
one: "you have 1 unread old post in this topic"
|
||||
one: "you have %{count} unread old post in this topic"
|
||||
other: "you have {{count}} unread old posts in this topic"
|
||||
new_posts:
|
||||
one: "there is 1 new post in this topic since you last read it"
|
||||
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"
|
||||
likes:
|
||||
one: "there is 1 like in this topic"
|
||||
one: "there is %{count} like in this topic"
|
||||
other: "there are {{count}} likes in this topic"
|
||||
back_to_list: "Back to Topic List"
|
||||
options: "Topic Options"
|
||||
|
@ -1998,7 +1998,7 @@ en:
|
|||
auto_reminder: "You will be reminded about this topic %{timeLeft}."
|
||||
auto_close_title: "Auto-Close Settings"
|
||||
auto_close_immediate:
|
||||
one: "The last post in the topic is already 1 hour old, so the topic will be closed immediately."
|
||||
one: "The last post in the topic is already %{count} hour old, so the topic will be closed immediately."
|
||||
other: "The last post in the topic is already %{count} hours old, so the topic will be closed immediately."
|
||||
|
||||
timeline:
|
||||
|
@ -2122,7 +2122,7 @@ en:
|
|||
pin_validation: "A date is required to pin this topic."
|
||||
not_pinned: "There are no topics pinned in {{categoryLink}}."
|
||||
already_pinned:
|
||||
one: "Topics currently pinned in {{categoryLink}}: <strong class='badge badge-notification unread'>1</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?"
|
||||
|
@ -2131,7 +2131,7 @@ en:
|
|||
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'>1</strong>"
|
||||
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>"
|
||||
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."
|
||||
|
@ -2176,7 +2176,7 @@ en:
|
|||
|
||||
filters:
|
||||
n_posts:
|
||||
one: "1 post"
|
||||
one: "%{count} post"
|
||||
other: "{{count}} posts"
|
||||
cancel: "Remove filter"
|
||||
|
||||
|
@ -2264,7 +2264,7 @@ en:
|
|||
select_all: select all
|
||||
deselect_all: deselect all
|
||||
description:
|
||||
one: You have selected <b>1</b> post.
|
||||
one: You have selected <b>%{count}</b> post.
|
||||
other: "You have selected <b>{{count}}</b> posts."
|
||||
|
||||
deleted_by_author:
|
||||
|
@ -2291,7 +2291,7 @@ en:
|
|||
expand_collapse: "expand/collapse"
|
||||
locked: "a staff member has locked this post from being edited"
|
||||
gap:
|
||||
one: "view 1 hidden reply"
|
||||
one: "view %{count} hidden reply"
|
||||
other: "view {{count}} hidden replies"
|
||||
|
||||
notice:
|
||||
|
@ -2304,12 +2304,12 @@ en:
|
|||
other: "{{count}} Replies"
|
||||
|
||||
has_likes_title:
|
||||
one: "1 person liked this post"
|
||||
one: "%{count} person 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 1 other person liked this post"
|
||||
one: "you and %{count} other person liked this post"
|
||||
other: "you and {{count}} other people liked this post"
|
||||
|
||||
errors:
|
||||
|
@ -2357,10 +2357,10 @@ en:
|
|||
delete_replies:
|
||||
confirm: "Do you also want to delete the replies to this post?"
|
||||
direct_replies:
|
||||
one: "Yes, and 1 direct reply"
|
||||
one: "Yes, and %{count} direct reply"
|
||||
other: "Yes, and {{count}} direct replies"
|
||||
all_replies:
|
||||
one: "Yes, and 1 reply"
|
||||
one: "Yes, and %{count} reply"
|
||||
other: "Yes, and all {{count}} replies"
|
||||
just_the_post: "No, just this post"
|
||||
admin: "post admin actions"
|
||||
|
@ -2609,13 +2609,13 @@ en:
|
|||
custom_placeholder_notify_moderators: "Let us know specifically what you are concerned about, and provide relevant links and examples where possible."
|
||||
custom_message:
|
||||
at_least:
|
||||
one: "enter at least 1 character"
|
||||
one: "enter at least %{count} character"
|
||||
other: "enter at least {{count}} characters"
|
||||
more:
|
||||
one: "1 to go..."
|
||||
one: "%{count} to go..."
|
||||
other: "{{count}} to go..."
|
||||
left:
|
||||
one: "1 remaining"
|
||||
one: "%{count} remaining"
|
||||
other: "{{count}} remaining"
|
||||
|
||||
flagging_topic:
|
||||
|
@ -2629,12 +2629,12 @@ en:
|
|||
links_title: "Popular Links"
|
||||
links_shown: "show more links..."
|
||||
clicks:
|
||||
one: "1 click"
|
||||
one: "%{count} click"
|
||||
other: "%{count} clicks"
|
||||
post_links:
|
||||
about: "expand more links for this post"
|
||||
title:
|
||||
one: "1 more"
|
||||
one: "%{count} more"
|
||||
other: "%{count} more"
|
||||
|
||||
topic_statuses:
|
||||
|
@ -2677,7 +2677,7 @@ en:
|
|||
other: "views"
|
||||
replies: "Replies"
|
||||
views_long:
|
||||
one: "this topic has been viewed 1 time"
|
||||
one: "this topic has been viewed %{count} time"
|
||||
other: "this topic has been viewed {{number}} times"
|
||||
activity: "Activity"
|
||||
likes: "Likes"
|
||||
|
@ -2705,7 +2705,7 @@ en:
|
|||
latest:
|
||||
title: "Latest"
|
||||
title_with_count:
|
||||
one: "Latest (1)"
|
||||
one: "Latest (%{count})"
|
||||
other: "Latest ({{count}})"
|
||||
help: "topics with recent posts"
|
||||
hot:
|
||||
|
@ -2724,20 +2724,20 @@ en:
|
|||
unread:
|
||||
title: "Unread"
|
||||
title_with_count:
|
||||
one: "Unread (1)"
|
||||
one: "Unread (%{count})"
|
||||
other: "Unread ({{count}})"
|
||||
help: "topics you are currently watching or tracking with unread posts"
|
||||
lower_title_with_count:
|
||||
one: "1 unread"
|
||||
one: "%{count} unread"
|
||||
other: "{{count}} unread"
|
||||
new:
|
||||
lower_title_with_count:
|
||||
one: "1 new"
|
||||
one: "%{count} new"
|
||||
other: "{{count}} new"
|
||||
lower_title: "new"
|
||||
title: "New"
|
||||
title_with_count:
|
||||
one: "New (1)"
|
||||
one: "New (%{count})"
|
||||
other: "New ({{count}})"
|
||||
help: "topics created in the last few days"
|
||||
posted:
|
||||
|
@ -2749,7 +2749,7 @@ en:
|
|||
category:
|
||||
title: "{{categoryName}}"
|
||||
title_with_count:
|
||||
one: "{{categoryName}} (1)"
|
||||
one: "{{categoryName}} (%{count})"
|
||||
other: "{{categoryName}} ({{count}})"
|
||||
help: "latest topics in the {{categoryName}} category"
|
||||
top:
|
||||
|
@ -2851,7 +2851,7 @@ en:
|
|||
|
||||
badges:
|
||||
earned_n_times:
|
||||
one: "Earned this badge 1 time"
|
||||
one: "Earned this badge %{count} time"
|
||||
other: "Earned this badge %{count} times"
|
||||
granted_on: "Granted %{date}"
|
||||
others_count: "Others with this badge (%{count})"
|
||||
|
@ -2859,13 +2859,13 @@ en:
|
|||
allow_title: "You can use this badge as a title"
|
||||
multiple_grant: "You can earn this multiple times"
|
||||
badge_count:
|
||||
one: "1 Badge"
|
||||
one: "%{count} Badge"
|
||||
other: "%{count} Badges"
|
||||
more_badges:
|
||||
one: "+1 More"
|
||||
one: "+%{count} More"
|
||||
other: "+%{count} More"
|
||||
granted:
|
||||
one: "1 granted"
|
||||
one: "%{count} granted"
|
||||
other: "%{count} granted"
|
||||
select_badge_for_title: Select a badge to use as your title
|
||||
none: "(none)"
|
||||
|
@ -2902,7 +2902,7 @@ en:
|
|||
choose_for_topic: "optional tags"
|
||||
delete_tag: "Delete Tag"
|
||||
delete_confirm:
|
||||
one: "Are you sure you want to delete this tag and remove it from 1 topic it is assigned to?"
|
||||
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?"
|
||||
delete_confirm_no_topics: "Are you sure you want to delete this tag?"
|
||||
rename_tag: "Rename Tag"
|
||||
|
@ -3247,7 +3247,7 @@ en:
|
|||
one: "There is a new event."
|
||||
other: "There are {{count}} new events."
|
||||
completed_in:
|
||||
one: "Completed in 1 second."
|
||||
one: "Completed in %{count} second."
|
||||
other: "Completed in {{count}} seconds."
|
||||
request: "Request"
|
||||
response: "Response"
|
||||
|
@ -3480,7 +3480,7 @@ en:
|
|||
theme_translations: "Theme Translations"
|
||||
empty: "No items"
|
||||
commits_behind:
|
||||
one: "Theme is 1 commit behind!"
|
||||
one: "Theme is %{count} commit 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:"
|
||||
|
@ -3789,7 +3789,7 @@ en:
|
|||
clear_filter: "Clear"
|
||||
show_words: "show words"
|
||||
word_count:
|
||||
one: "1 word"
|
||||
one: "%{count} word"
|
||||
other: "%{count} words"
|
||||
actions:
|
||||
block: "Block"
|
||||
|
@ -3948,7 +3948,7 @@ en:
|
|||
one: "Can't delete all posts. Some posts are older than %{count} day old. (The delete_user_max_post_age setting.)"
|
||||
other: "Can't delete all posts. Some posts are older than %{count} days old. (The delete_user_max_post_age setting.)"
|
||||
cant_delete_all_too_many_posts:
|
||||
one: "Can't delete all posts because the user has more than 1 post. (delete_all_posts_max)"
|
||||
one: "Can't delete all posts because the user has more than %{count} post. (delete_all_posts_max)"
|
||||
other: "Can't delete all posts because the user has more than %{count} posts. (delete_all_posts_max)"
|
||||
delete_confirm: "It is generally preferable to anonymize users rather than deleting them, to avoid removing content from existing discussions.<br><br>Are you SURE you want to delete this user? This is permanent!"
|
||||
delete_and_block: "Delete and <b>block</b> this email and IP address"
|
||||
|
@ -4187,7 +4187,7 @@ en:
|
|||
text: "There are missing grant samples. This happens when the badge query returns user IDs or post IDs that do not exist. This may cause unexpected results later on - please double-check your query."
|
||||
no_grant_count: "No badges to be assigned."
|
||||
grant_count:
|
||||
one: "<b>1</b> badge to be assigned."
|
||||
one: "<b>%{count}</b> badge to be assigned."
|
||||
other: "<b>%{count}</b> badges to be assigned."
|
||||
sample: "Sample:"
|
||||
grant:
|
||||
|
@ -4280,7 +4280,7 @@ en:
|
|||
quit: "Maybe Later"
|
||||
|
||||
staff_count:
|
||||
one: "Your community has 1 staff (you). "
|
||||
one: "Your community has %{count} staff (you). "
|
||||
other: "Your community has %{count} staff, including you."
|
||||
|
||||
invites:
|
||||
|
|
|
@ -171,19 +171,19 @@ en:
|
|||
one: "Cannot delete record because a dependent %{record} exists"
|
||||
many: "Cannot delete record because dependent %{record} exist"
|
||||
too_long:
|
||||
one: is too long (maximum is 1 character)
|
||||
one: is too long (maximum is %{count} character)
|
||||
other: is too long (maximum is %{count} characters)
|
||||
too_short:
|
||||
one: is too short (minimum is 1 character)
|
||||
one: is too short (minimum is %{count} character)
|
||||
other: is too short (minimum is %{count} characters)
|
||||
wrong_length:
|
||||
one: is the wrong length (should be 1 character)
|
||||
one: is the wrong length (should be %{count} character)
|
||||
other: is the wrong length (should be %{count} characters)
|
||||
other_than: "must be other than %{count}"
|
||||
template:
|
||||
body: ! "There were problems with the following fields:"
|
||||
header:
|
||||
one: 1 error prohibited this %{model} from being saved
|
||||
one: "%{count} error prohibited this %{model} from being saved"
|
||||
other: ! "%{count} errors prohibited this %{model} from being saved"
|
||||
embed:
|
||||
load_from_remote: "There was an error loading that post."
|
||||
|
@ -249,7 +249,7 @@ en:
|
|||
likes: "Likes"
|
||||
|
||||
too_many_replies:
|
||||
one: "We're sorry, but new users are temporarily limited to 1 reply in the same topic."
|
||||
one: "We're sorry, but new users are temporarily limited to %{count} reply in the same topic."
|
||||
other: "We're sorry, but new users are temporarily limited to %{count} replies in the same topic."
|
||||
|
||||
max_consecutive_replies:
|
||||
|
@ -265,7 +265,7 @@ en:
|
|||
no_hosts: "No hosts were set up for embedding."
|
||||
configure: "Configure Embedding"
|
||||
more_replies:
|
||||
one: "1 more reply"
|
||||
one: "%{count} more reply"
|
||||
other: "%{count} more replies"
|
||||
|
||||
loading: "Loading Discussion..."
|
||||
|
@ -382,7 +382,7 @@ en:
|
|||
|
||||
education:
|
||||
until_posts:
|
||||
one: "1 post"
|
||||
one: "%{count} post"
|
||||
other: "%{count} posts"
|
||||
|
||||
"new-topic": |
|
||||
|
@ -604,7 +604,7 @@ en:
|
|||
uncategorized: "This category is special. It is intended as a holding area for topics that have no category; it cannot be deleted."
|
||||
has_subcategories: "Can't delete this category because it has sub-categories."
|
||||
topic_exists:
|
||||
one: "Can't delete this category because it has 1 topic. Oldest topic is %{topic_link}."
|
||||
one: "Can't delete this category because it has %{count} topic. Oldest topic is %{topic_link}."
|
||||
other: "Can't delete this category because it has %{count} topics. Oldest topic is %{topic_link}."
|
||||
topic_exists_no_oldest: "Can't delete this category because topic count is %{count}."
|
||||
uncategorized_description: "Topics that don't need a category, or don't fit into any other existing category."
|
||||
|
@ -648,13 +648,13 @@ en:
|
|||
topic_invitations_per_day: "You’ve reached the maximum number of topic invitations. Please wait %{time_left} before trying again."
|
||||
|
||||
hours:
|
||||
one: "1 hour"
|
||||
one: "%{count} hour"
|
||||
other: "%{count} hours"
|
||||
minutes:
|
||||
one: "1 minute"
|
||||
one: "%{count} minute"
|
||||
other: "%{count} minutes"
|
||||
seconds:
|
||||
one: "1 second"
|
||||
one: "%{count} second"
|
||||
other: "%{count} seconds"
|
||||
short_time: "a few seconds"
|
||||
|
||||
|
@ -662,37 +662,37 @@ en:
|
|||
distance_in_words:
|
||||
half_a_minute: "< 1m"
|
||||
less_than_x_seconds:
|
||||
one: "< 1s"
|
||||
one: "< %{count}s"
|
||||
other: "< %{count}s"
|
||||
x_seconds:
|
||||
one: "1s"
|
||||
one: "%{count}s"
|
||||
other: "%{count}s"
|
||||
less_than_x_minutes:
|
||||
one: "< 1m"
|
||||
one: "< %{count}m"
|
||||
other: "< %{count}m"
|
||||
x_minutes:
|
||||
one: "1m"
|
||||
one: "%{count}m"
|
||||
other: "%{count}m"
|
||||
about_x_hours:
|
||||
one: "1h"
|
||||
one: "%{count}h"
|
||||
other: "%{count}h"
|
||||
x_days:
|
||||
one: "1d"
|
||||
one: "%{count}d"
|
||||
other: "%{count}d"
|
||||
about_x_months:
|
||||
one: "1mon"
|
||||
one: "%{count}mon"
|
||||
other: "%{count}mon"
|
||||
x_months:
|
||||
one: "1mon"
|
||||
one: "%{count}mon"
|
||||
other: "%{count}mon"
|
||||
about_x_years:
|
||||
one: "1y"
|
||||
one: "%{count}y"
|
||||
other: "%{count}y"
|
||||
over_x_years:
|
||||
one: "> 1y"
|
||||
one: "> %{count}y"
|
||||
other: "> %{count}y"
|
||||
almost_x_years:
|
||||
one: "1y"
|
||||
one: "%{count}y"
|
||||
other: "%{count}y"
|
||||
|
||||
distance_in_words_verbose:
|
||||
|
@ -701,34 +701,34 @@ en:
|
|||
one: "just now"
|
||||
other: "just now"
|
||||
x_seconds:
|
||||
one: "1 second ago"
|
||||
one: "%{count} second ago"
|
||||
other: "%{count} seconds ago"
|
||||
less_than_x_minutes:
|
||||
one: "less than 1 minute ago"
|
||||
one: "less than %{count} minute ago"
|
||||
other: "less than %{count} minutes ago"
|
||||
x_minutes:
|
||||
one: "1 minute ago"
|
||||
one: "%{count} minute ago"
|
||||
other: "%{count} minutes ago"
|
||||
about_x_hours:
|
||||
one: "1 hour ago"
|
||||
one: "%{count} hour ago"
|
||||
other: "%{count} hours ago"
|
||||
x_days:
|
||||
one: "1 day ago"
|
||||
one: "%{count} day ago"
|
||||
other: "%{count} days ago"
|
||||
about_x_months:
|
||||
one: "about 1 month ago"
|
||||
one: "about %{count} month ago"
|
||||
other: "about %{count} months ago"
|
||||
x_months:
|
||||
one: "1 month ago"
|
||||
one: "%{count} month ago"
|
||||
other: "%{count} months ago"
|
||||
about_x_years:
|
||||
one: "about 1 year ago"
|
||||
one: "about %{count} year ago"
|
||||
other: "about %{count} years ago"
|
||||
over_x_years:
|
||||
one: "over 1 year ago"
|
||||
one: "over %{count} year ago"
|
||||
other: "over %{count} years ago"
|
||||
almost_x_years:
|
||||
one: "almost 1 year ago"
|
||||
one: "almost %{count} year ago"
|
||||
other: "almost %{count} years ago"
|
||||
|
||||
password_reset:
|
||||
|
@ -2138,47 +2138,47 @@ en:
|
|||
|
||||
topic_statuses:
|
||||
autoclosed_message_max_posts:
|
||||
one: "This message was automatically closed after reaching the maximum limit of 1 reply."
|
||||
one: "This message was automatically closed after reaching the maximum limit of %{count} reply."
|
||||
other: "This message was automatically closed after reaching the maximum limit of %{count} replies."
|
||||
autoclosed_topic_max_posts:
|
||||
one: "This topic was automatically closed after reaching the maximum limit of 1 reply."
|
||||
one: "This topic was automatically closed after reaching the maximum limit of %{count} reply."
|
||||
other: "This topic was automatically closed after reaching the maximum limit of %{count} replies."
|
||||
autoclosed_enabled_days:
|
||||
one: "This topic was automatically closed after 1 day. New replies are no longer allowed."
|
||||
one: "This topic was automatically closed after %{count} day. New replies are no longer allowed."
|
||||
other: "This topic was automatically closed after %{count} days. New replies are no longer allowed."
|
||||
autoclosed_enabled_hours:
|
||||
one: "This topic was automatically closed after 1 hour. New replies are no longer allowed."
|
||||
one: "This topic was automatically closed after %{count} hour. New replies are no longer allowed."
|
||||
other: "This topic was automatically closed after %{count} hours. New replies are no longer allowed."
|
||||
autoclosed_enabled_minutes:
|
||||
one: "This topic was automatically closed after 1 minute. New replies are no longer allowed."
|
||||
one: "This topic was automatically closed after %{count} minute. New replies are no longer allowed."
|
||||
other: "This topic was automatically closed after %{count} minutes. New replies are no longer allowed."
|
||||
autoclosed_enabled_lastpost_days:
|
||||
one: "This topic was automatically closed 1 day after the last reply. New replies are no longer allowed."
|
||||
one: "This topic was automatically closed %{count} day after the last reply. New replies are no longer allowed."
|
||||
other: "This topic was automatically closed %{count} days after the last reply. New replies are no longer allowed."
|
||||
autoclosed_enabled_lastpost_hours:
|
||||
one: "This topic was automatically closed 1 hour after the last reply. New replies are no longer allowed."
|
||||
one: "This topic was automatically closed %{count} hour after the last reply. New replies are no longer allowed."
|
||||
other: "This topic was automatically closed %{count} hours after the last reply. New replies are no longer allowed."
|
||||
autoclosed_enabled_lastpost_minutes:
|
||||
one: "This topic was automatically closed 1 minute after the last reply. New replies are no longer allowed."
|
||||
one: "This topic was automatically closed %{count} minute after the last reply. New replies are no longer allowed."
|
||||
other: "This topic was automatically closed %{count} minutes after the last reply. New replies are no longer allowed."
|
||||
|
||||
autoclosed_disabled_days:
|
||||
one: "This topic was automatically opened after 1 day."
|
||||
one: "This topic was automatically opened after %{count} day."
|
||||
other: "This topic was automatically opened after %{count} days."
|
||||
autoclosed_disabled_hours:
|
||||
one: "This topic was automatically opened after 1 hour."
|
||||
one: "This topic was automatically opened after %{count} hour."
|
||||
other: "This topic was automatically opened after %{count} hours."
|
||||
autoclosed_disabled_minutes:
|
||||
one: "This topic was automatically opened after 1 minute."
|
||||
one: "This topic was automatically opened after %{count} minute."
|
||||
other: "This topic was automatically opened after %{count} minutes."
|
||||
autoclosed_disabled_lastpost_days:
|
||||
one: "This topic was automatically opened 1 day after the last reply."
|
||||
one: "This topic was automatically opened %{count} day after the last reply."
|
||||
other: "This topic was automatically opened %{count} days after the last reply."
|
||||
autoclosed_disabled_lastpost_hours:
|
||||
one: "This topic was automatically opened 1 hour after the last reply."
|
||||
one: "This topic was automatically opened %{count} hour after the last reply."
|
||||
other: "This topic was automatically opened %{count} hours after the last reply."
|
||||
autoclosed_disabled_lastpost_minutes:
|
||||
one: "This topic was automatically opened 1 minute after the last reply."
|
||||
one: "This topic was automatically opened %{count} minute after the last reply."
|
||||
other: "This topic was automatically opened %{count} minutes after the last reply."
|
||||
|
||||
autoclosed_disabled: "This topic is now opened. New replies are allowed."
|
||||
|
@ -2259,10 +2259,10 @@ en:
|
|||
|
||||
reviewables_reminder:
|
||||
submitted:
|
||||
one: "Items were submitted over 1 hour ago. [Please review them](%{base_path}/review)."
|
||||
one: "Items were submitted over %{count} hour ago. [Please review them](%{base_path}/review)."
|
||||
other: "Items were submitted over %{count} hours ago. [Please review them](%{base_path}/review)."
|
||||
subject_template:
|
||||
one: "1 item needs to be reviewed"
|
||||
one: "%{count} item needs to be reviewed"
|
||||
other: "%{count} items need to be reviewed"
|
||||
|
||||
unsubscribe_mailer:
|
||||
|
@ -2473,7 +2473,7 @@ en:
|
|||
ignored_and_deleted: "Thanks for letting us know. We've removed the post."
|
||||
|
||||
temporarily_closed_due_to_flags:
|
||||
one: "This topic is temporarily closed for at least 1 hour due to a large number of community flags."
|
||||
one: "This topic is temporarily closed for at least %{count} hour due to a large number of community flags."
|
||||
other: "This topic is temporarily closed for at least %{count} hours due to a large number of community flags."
|
||||
|
||||
system_messages:
|
||||
|
@ -2974,7 +2974,7 @@ en:
|
|||
pending_users_reminder:
|
||||
title: "Pending Users Reminder"
|
||||
subject_template:
|
||||
one: "1 user waiting for approval"
|
||||
one: "%{count} user waiting for approval"
|
||||
other: "%{count} users waiting for approval"
|
||||
text_body_template: |
|
||||
There are new user signups waiting to be approved (or rejected) before they can access this forum.
|
||||
|
@ -3007,7 +3007,7 @@ en:
|
|||
queued_posts_reminder:
|
||||
title: "Queued Posts Reminder"
|
||||
subject_template:
|
||||
one: "1 post waiting to be reviewed"
|
||||
one: "%{count} post waiting to be reviewed"
|
||||
other: "%{count} posts waiting to be reviewed"
|
||||
text_body_template: |
|
||||
Hello,
|
||||
|
@ -3032,7 +3032,7 @@ en:
|
|||
user_notifications:
|
||||
previous_discussion: "Previous Replies"
|
||||
reached_limit:
|
||||
one: "Heads up: We send a maximum of 1 daily email. Check the site to see the ones that might be held back."
|
||||
one: "Heads up: We send a maximum of %{count} daily email. Check the site to see the ones that might be held back."
|
||||
other: "Heads up: We send a maximum of %{count} daily emails. Check the site to see the ones that might be held back. PS thanks for being popular!"
|
||||
in_reply_to: "In Reply To"
|
||||
unsubscribe:
|
||||
|
|
|
@ -39,13 +39,13 @@ en:
|
|||
multiple:
|
||||
help:
|
||||
at_least_min_options:
|
||||
one: "Choose at least <strong>1</strong> option"
|
||||
one: "Choose at least <strong>%{count}</strong> option"
|
||||
other: "Choose at least <strong>%{count}</strong> options"
|
||||
up_to_max_options:
|
||||
one: "Choose up to <strong>1</strong> option"
|
||||
one: "Choose up to <strong>%{count}</strong> option"
|
||||
other: "Choose up to <strong>%{count}</strong> options"
|
||||
x_options:
|
||||
one: "Choose <strong>1</strong> option"
|
||||
one: "Choose <strong>%{count}</strong> option"
|
||||
other: "Choose <strong>%{count}</strong> options"
|
||||
between_min_and_max_options: "Choose between <strong>%{min}</strong> and <strong>%{max}</strong> options"
|
||||
|
||||
|
|
|
@ -31,10 +31,10 @@ en:
|
|||
named_poll_must_have_at_least_2_options: "Poll named <strong>%{name}</strong> must have at least 2 options."
|
||||
|
||||
default_poll_must_have_less_options:
|
||||
one: "Poll must have less than 1 option."
|
||||
one: "Poll must have less than %{count} option."
|
||||
other: "Poll must have less than %{count} options."
|
||||
named_poll_must_have_less_options:
|
||||
one: "Poll named <strong>%{name}</strong> must have less than 1 option."
|
||||
one: "Poll named <strong>%{name}</strong> must have less than %{count} option."
|
||||
other: "Poll named <strong>%{name}</strong> must have less than %{count} options."
|
||||
|
||||
default_poll_must_have_different_options: "Poll must have different options."
|
||||
|
|
|
@ -8,6 +8,7 @@ def extract_locale(path)
|
|||
end
|
||||
|
||||
PLURALIZATION_KEYS ||= ['zero', 'one', 'two', 'few', 'many', 'other']
|
||||
ENGLISH_KEYS ||= ['one', 'other']
|
||||
|
||||
def find_pluralizations(hash, parent_key = '', pluralizations = Hash.new)
|
||||
hash.each do |key, value|
|
||||
|
@ -107,11 +108,33 @@ describe "i18n integrity checks" do
|
|||
expect(english_duplicates).to be_empty
|
||||
end
|
||||
|
||||
context "pluralizations" do
|
||||
wrong_keys = []
|
||||
invald_one_keys = []
|
||||
|
||||
find_pluralizations(english_yaml).each do |key, hash|
|
||||
next if key["messages.restrict_dependent_destroy"]
|
||||
|
||||
it "has valid pluralizations for '#{key}'" do
|
||||
expect(hash.keys).to contain_exactly("one", "other")
|
||||
wrong_keys << key if hash.keys.sort != ENGLISH_KEYS
|
||||
|
||||
if one_value = hash['one']
|
||||
invald_one_keys << key if one_value.include?('1') && !one_value.match?(/%{count}|{{count}}/)
|
||||
end
|
||||
end
|
||||
|
||||
it "has valid pluralizations keys" do
|
||||
keys = wrong_keys.join("\n")
|
||||
expect(wrong_keys).to be_empty, <<~MSG
|
||||
Pluralized strings must have only the sub-keys 'one' and 'other'.
|
||||
The following keys have missing or additional keys:\n\n#{keys}
|
||||
MSG
|
||||
end
|
||||
|
||||
it "should use %{count} instead of 1 in 'one' keys" do
|
||||
keys = invald_one_keys.join(".one\n")
|
||||
expect(invald_one_keys).to be_empty, <<~MSG
|
||||
The following keys contain the number 1 instead of the interpolation key %{count}:\n\n#{keys}
|
||||
MSG
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue