i18n: Introduce plural forms for reservations, emails, messages
In many languages there is more than one plural form of nouns and rules for choosing the correct one are often far more complex than in English. Luckily both react-i18next and Weblate provide built-in support for translating and selecting plural forms in accordance with grammatical rules of any given language. In order to enable plural forms `{count: n}` option is added to relevant `t()` calls. In translations files "_one" and "_other" suffix is added to English labels such that Weblate can detect which entries represent a set of plural forms and show appropriate language-specific form on the translation page. E.g. in Polish there are 2 plural forms and hence 3 resulting suffixes: "_one", "_few", "_many". Note on transition period: in the absence of expected suffixed variants react-i18next will use non-suffixed one (if present) so existing translations will continue to work just fine even if they happen to be grammatically imperfect. Translators can provide proper plural forms in once this change is merged and Weblate will then replace non-suffixed labels with the suffixed ones.pull/678/head
parent
b8836d674a
commit
338cab1660
|
@ -225,10 +225,13 @@
|
||||||
"account_upgrade_dialog_proration_info": "<strong>Proration</strong>: When upgrading between paid plans, the price difference will be <strong>charged immediately</strong>. When downgrading to a lower tier, the balance will be used to pay for future billing periods.",
|
"account_upgrade_dialog_proration_info": "<strong>Proration</strong>: When upgrading between paid plans, the price difference will be <strong>charged immediately</strong>. When downgrading to a lower tier, the balance will be used to pay for future billing periods.",
|
||||||
"account_upgrade_dialog_reservations_warning_one": "The selected tier allows fewer reserved topics than your current tier. Before changing your tier, <strong>please delete at least one reservation</strong>. You can remove reservations in the <Link>Settings</Link>.",
|
"account_upgrade_dialog_reservations_warning_one": "The selected tier allows fewer reserved topics than your current tier. Before changing your tier, <strong>please delete at least one reservation</strong>. You can remove reservations in the <Link>Settings</Link>.",
|
||||||
"account_upgrade_dialog_reservations_warning_other": "The selected tier allows fewer reserved topics than your current tier. Before changing your tier, <strong>please delete at least {{count}} reservations</strong>. You can remove reservations in the <Link>Settings</Link>.",
|
"account_upgrade_dialog_reservations_warning_other": "The selected tier allows fewer reserved topics than your current tier. Before changing your tier, <strong>please delete at least {{count}} reservations</strong>. You can remove reservations in the <Link>Settings</Link>.",
|
||||||
"account_upgrade_dialog_tier_features_reservations": "{{reservations}} reserved topics",
|
"account_upgrade_dialog_tier_features_reservations_one": "{{reservations}} reserved topic",
|
||||||
|
"account_upgrade_dialog_tier_features_reservations_other": "{{reservations}} reserved topics",
|
||||||
"account_upgrade_dialog_tier_features_no_reservations": "No reserved topics",
|
"account_upgrade_dialog_tier_features_no_reservations": "No reserved topics",
|
||||||
"account_upgrade_dialog_tier_features_messages": "{{messages}} daily messages",
|
"account_upgrade_dialog_tier_features_messages_one": "{{messages}} daily message",
|
||||||
"account_upgrade_dialog_tier_features_emails": "{{emails}} daily emails",
|
"account_upgrade_dialog_tier_features_messages_other": "{{messages}} daily messages",
|
||||||
|
"account_upgrade_dialog_tier_features_emails_one": "{{emails}} daily email",
|
||||||
|
"account_upgrade_dialog_tier_features_emails_other": "{{emails}} daily emails",
|
||||||
"account_upgrade_dialog_tier_features_attachment_file_size": "{{filesize}} per file",
|
"account_upgrade_dialog_tier_features_attachment_file_size": "{{filesize}} per file",
|
||||||
"account_upgrade_dialog_tier_features_attachment_total_size": "{{totalsize}} total storage",
|
"account_upgrade_dialog_tier_features_attachment_total_size": "{{totalsize}} total storage",
|
||||||
"account_upgrade_dialog_tier_price_per_month": "month",
|
"account_upgrade_dialog_tier_price_per_month": "month",
|
||||||
|
|
|
@ -297,10 +297,10 @@ const TierCard = (props) => {
|
||||||
{monthlyPrice > 0 && <>/ {t("account_upgrade_dialog_tier_price_per_month")}</>}
|
{monthlyPrice > 0 && <>/ {t("account_upgrade_dialog_tier_price_per_month")}</>}
|
||||||
</div>
|
</div>
|
||||||
<List dense>
|
<List dense>
|
||||||
{tier.limits.reservations > 0 && <Feature>{t("account_upgrade_dialog_tier_features_reservations", { reservations: tier.limits.reservations })}</Feature>}
|
{tier.limits.reservations > 0 && <Feature>{t("account_upgrade_dialog_tier_features_reservations", { reservations: tier.limits.reservations, count: tier.limits.reservations })}</Feature>}
|
||||||
{tier.limits.reservations === 0 && <NoFeature>{t("account_upgrade_dialog_tier_features_no_reservations")}</NoFeature>}
|
{tier.limits.reservations === 0 && <NoFeature>{t("account_upgrade_dialog_tier_features_no_reservations")}</NoFeature>}
|
||||||
<Feature>{t("account_upgrade_dialog_tier_features_messages", { messages: formatNumber(tier.limits.messages) })}</Feature>
|
<Feature>{t("account_upgrade_dialog_tier_features_messages", { messages: formatNumber(tier.limits.messages), count: tier.limits.messages })}</Feature>
|
||||||
<Feature>{t("account_upgrade_dialog_tier_features_emails", { emails: formatNumber(tier.limits.emails) })}</Feature>
|
<Feature>{t("account_upgrade_dialog_tier_features_emails", { emails: formatNumber(tier.limits.emails), count: tier.limits.emails })}</Feature>
|
||||||
<Feature>{t("account_upgrade_dialog_tier_features_attachment_file_size", { filesize: formatBytes(tier.limits.attachment_file_size, 0) })}</Feature>
|
<Feature>{t("account_upgrade_dialog_tier_features_attachment_file_size", { filesize: formatBytes(tier.limits.attachment_file_size, 0) })}</Feature>
|
||||||
<Feature>{t("account_upgrade_dialog_tier_features_attachment_total_size", { totalsize: formatBytes(tier.limits.attachment_total_size, 0) })}</Feature>
|
<Feature>{t("account_upgrade_dialog_tier_features_attachment_total_size", { totalsize: formatBytes(tier.limits.attachment_total_size, 0) })}</Feature>
|
||||||
</List>
|
</List>
|
||||||
|
|
Loading…
Reference in New Issue