[20] [[自然言語]]の[[単語]]や[[語句]]は、その表現または修飾する対象物の[[数]]により[[語形]]が変化することがあります。
[[複数]]の際に用いられる形、ひいては[[数]]による[[語形]]変化のことを一般に[DFN[[RUBYB[複数形]@en[plural forms]]]]といいます。

* [CODE[Plural-Forms:]] 欄 (.PO)

[19] [[POファイル]]の[[ヘッダー]]の [DFN[[CODE[[[Plural-Forms:]]]]]]
[[欄]]は、[[複数形]]の決定の式を表します。

[30] この[[式]]は、[[非負整数]]の入力 [VAR[n]] に対して [[C]]
風の[[演算子]]を使ってどの活用形を用いるかを返す形になっています。

[REFS[
- [13] [CITE[GNU gettext utilities: Plural forms]]
([TIME[2015-04-25 22:43:45 +09:00]] 版)
<https://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html>
]REFS]

[21] この形式では[[整数]] (通常は[[非負整数]]) を入力とする任意の語形変化を記述できますが、
同じ語形変化でも表現方式は一意には定まりません。

[EG[
[22] 例えば単複2形がある場合、0=単数、1=複数とする式と0=複数、1=単数とする式を書くことが容易に可能で、
どちらにするかで[[POファイル]]の内容は全く異なるものになります。また、同じ意味の式は無限に作ることができます。

[23] 更に、同じ例で0=未使用、1=単数、2=複数となるような式を使うことも可能です。
理論上可能なだけでなく、実際にそのような未使用の形を持つ[[POファイル]]は存在しています
(何らかの意図を持っているのか、誤りなのかは不明です)。
]EG]

[24] 欄の値の末尾に [CODE[;]] がありますが、実際には [CODE[;]] が欠けた
[[POファイル]]や、改行を表す [CODE[\n]] がそのままの文字列として含まれた 
[[POファイル]]も存在しているようです。また、これらの構文をまったく無視したおかしな
[[POファイル]]も存在しているようです。実装がこうした異常な入力をどう扱っているのかは不明です。

[EG[
[1] 
[PRE(example code)[
Plural-Forms: nplurals=2; plural=(n != 1);
]PRE]

[2]
[PRE(example code)[
Plural-Forms: nplurals=2; plural=n != 1;
]PRE]

[3]
[PRE(example code)[
Plural-Forms: nplurals=1; plural=0; 
]PRE]

[4]
[PRE(example code)[
Plural-Forms: nplurals=2; plural=(n==1?0:1);
]PRE]

[5]
[PRE(example code)[
Plural-Forms: nplurals=2; plural=n>1;
]PRE]
]EG]

[9] [CITE[Plural Forms — Localization Guide 0.9.0 documentation]]
([TIME[2015-03-12 03:51:13 +09:00]] 版)
<http://localization-guide.readthedocs.org/en/latest/l10n/pluralforms.html>

* Mozilla

[15] [[Mozilla]] の実装である [DFN[[[PluralForm]]]] は、一般的な[[複数形]]の形態
17種類に番号を与えています [SRC[>>11, >>14]]。

[29] 内部的には番号から [[POファイル]]同様の式を得て、利用する形を選択しています [SRC[>>14]]。

[REFS[
- [14] [CITE@en[gecko-dev/PluralForm.jsm at master · mozilla/gecko-dev]]
([TIME[2015-04-26 11:43:04 +09:00]] 版)
<https://github.com/mozilla/gecko-dev/blob/master/intl/locale/PluralForm.jsm>
- [11] [CITE@en-US[Localization and Plurals - Mozilla | MDN]]
([TIME[2014-05-27 20:01:28 +09:00]] 版)
<https://developer.mozilla.org/en-US/docs/Mozilla/Localization/Localization_and_Plurals>
]REFS]

[8] [CITE[mozilla mozilla/intl/locale/src/PluralForm.jsm]]
([TIME[2008-03-13 08:52:06 +09:00]] 版)
<http://mxr.mozilla.org/mozilla/source/intl/locale/src/PluralForm.jsm#39>

[FIG(quote)[
[FIGCAPTION[
[7] [CITE@ar[Plural Forms - Arabeyes Wiki - ويكي عرب‌آيز]]
([TIME[2015-04-25 22:23:56 +09:00]] 版)
<http://www.arabeyes.org/Plural_Forms>
]FIGCAPTION]

> For Mozilla products (Firefox, Thunderbird, Sunbird, Fennec), the case where n == 0 is shifted to become the last case (due to some backward compatibility with the older plural rule).
> Plural formula
> This is the plural formula used for the forms above:
> nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5;
> An exception for Mozilla products is:
> nplurals=6; plural=n==0 ? 5 : n==1 ? 0 : n==2 ? 1 : n%100>=3 && n%100<=10 ? 2 : n%100>=11 ? 3 : 4;

]FIG]

* CLDR

[25] [[CLDR]] には各[[ロケール]]の[[複数形]]の[[活用]]情報が含まれるファイル
[SRC[>>18, >>26, >>27]] があります。

[28] これらのファイルは [[LDML]] [SRC[>>16]] により記述されています [SRC[>>10]]。
[[LDML]] も[[式]]により活用形を決定する形で記述されています [SRC[>>45]] が、 
[[POファイル]]とは違う独自の構文になっています。

[31] [[CLDR]] には[[小数]]の扱いの情報も含まれています。

[32] [[CLDR]] には数値の範囲の扱いの情報も含まれています。

[46] 
[[CLDR]]
の式言語中の[RUBYB[[[被演算子]]][operand]]は、
次のような意味を持ちます。 [SRC[>>45]]

- [CODE[n]]: [[数値]]の[[絶対値]]
- [CODE[i]]: [CODE[n]] の[[整数]]部
- [CODE[v]]: [CODE[n]] の可視小数桁数、末尾0を含む
- [CODE[w]]: [CODE[n]] の可視小数桁数、末尾0を除く
- [CODE[f]]: [CODE[n]] の可視小数部、末尾0を含む
- [CODE[t]]: [CODE[n]] の可視小数部、末尾0を除く
- [CODE[c]]: [RUBYB[簡潔][compact]]十進指数値 (簡潔十進書式付に使う10の冪乗の指数部)
- [CODE[e]]: [CODE[c]] と同じ (将来再定義される可能性あり)

[47] 
[CODE[c]], [CODE[e]] はいわゆる[[指数表記]]の数値を扱う時の指数を表すものです。
そのような場合の [CODE[i]], [CODE[f]], [CODE[t]], [CODE[v]], [CODE[w]]
は[[指数表記]]ではなく通常の十進表記に改めたときの状態を示します。
[SRC[>>45]]

[REFS[
- [10] [CITE[Language Plural Rules]]
([TIME[2015-04-01 02:08:49 +09:00]] 版)
<http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html>
- [17] ([TIME[2015-02-19 00:11:57 +09:00]] 版) <http://www.unicode.org/repos/cldr/trunk/common/supplemental/plurals.xml>
- [26] ([TIME[2015-02-19 00:11:57 +09:00]] 版) <http://www.unicode.org/repos/cldr/trunk/common/supplemental/ordinals.xml>
- [27] ([TIME[2015-02-11 13:44:44 +09:00]] 版) <http://www.unicode.org/repos/cldr/trunk/common/supplemental/pluralRanges.xml>
- [18] [CITE[Plural Rules - CLDR - Unicode Common Locale Data Repository]]
([TIME[2015-04-25 16:59:20 +09:00]] 版)
<http://cldr.unicode.org/index/cldr-spec/plural-rules>
- [16] [CITE@en-us[UTS #35: Unicode LDML: Numbers]]
([TIME[2015-03-19 00:59:55 +09:00]] 版)
<http://unicode.org/reports/tr35/tr35-numbers.html#Language_Plural_Rules>
-- [45] [CITE@en-us[UTS #35: Unicode LDML: Numbers]], [TIME[2020-10-23T18:30:47.000Z]], [TIME[2021-02-22T09:55:21.448Z]] <http://unicode.org/reports/tr35/tr35-numbers.html#Plural_rules_syntax>
]REFS]

* データファイル

[34] >>33 の [[JSON]] ファイルには、各言語で必要な[[複数形]]の活用の情報や、
色々な [[POファイル]]で使われている[[式]]の一覧が含まれています。

[REFS[
- [33] [CITE@en[data-locale/langs-plurals.txt at master · manakai/data-locale]] ([TIME[2015-04-26 18:30:07 +09:00]] 版) <https://github.com/manakai/data-locale/blob/master/doc/langs-plurals.txt>
-- [35] [CITE@en[data-locale/plurals.json at master · manakai/data-locale]] ([TIME[2015-04-26 18:31:42 +09:00]] 版) <https://github.com/manakai/data-locale/blob/master/data/langs/plurals.json>
]REFS]

* 日本語

[37] [[日本語]]で[[複数形]]活用が大きな問題となるのは「つ」の時くらいのようです [SRC[>>36]]。

[38] ただし[[漢字]]表記は変化がなくても発音が変化することはよくあるので [SRC[>>36]]、
[[仮名]]表記や[[ローマ字]]表記を扱う必要があるなら、かなり複雑になりそうです。

[REFS[
- [36] [CITE@ja[助数詞 - Wikipedia]] ([TIME[2015-03-30 17:20:14 +09:00]] 版) <http://ja.wikipedia.org/wiki/%E5%8A%A9%E6%95%B0%E8%A9%9E>
]REFS]

[39] 単語としては活用しなくても、「ファイルが0個あります。」より
「ファイルがありません。」の方が自然な場面もあります。

[6] [[複数形]]は、[[接尾辞]]「[DFN[[[群]]]]」と訳すことがあります。

[FIG(quote)[
[FIGCAPTION[
[12] [CITE[Mozilla L10N :: トピックを表示 - ''''''[''''''fixed'''''']''''''%S つ]]
([TIME[2015-04-25 22:38:34 +09:00]] 版)
<http://forums.firehacks.org/l10n/viewtopic.php?t=2722>
]FIGCAPTION]

> %Sが10以上になることを考えると「%S つ」ではまずいと思います。 
> 改善案: %S 個 or %S 件 
> PluralForm.jsmで「1-9とそれ以外」のplural rule新設を主張すれば、通るでしょうか...?

]FIG]

- [49] [CITE@ja[Xユーザーのかえるさん: 「0つ🤔 https://t.co/fC8ygqehgY」 / X]], [TIME[午後11:18 · 2024年5月11日][2024-05-11T14:18:06.000Z]], [TIME[2024-06-01T02:20:29.000Z]] <https://x.com/kaeru2193/status/1789298945719701593>


[50] 
最近は「27日」を「にじゅうなのか」と読む人もちらほら見かけ(聞きかけ?)ますね。


* メモ

[40] [CITE@en[AngularJS: API: ngPluralize]]
([TIME[2015-04-11 05:53:28 +09:00]] 版)
<https://docs.angularjs.org/api/ng/directive/ngPluralize>

[41] [CITE@en-US[Localization - Mozilla | MDN]]
([TIME[2015-04-03 21:57:50 +09:00]] 版)
<https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/l10n#Plurals>

[42] [CITE@en[Localization Strings — MathJax 2.5 documentation]]
([TIME[2015-06-28 00:30:06 +09:00]] 版)
<http://docs.mathjax.org/en/latest/localization-strings.html>

[43] [CITE@en[globalize/plural-generator.md at master · jquery/globalize]]
([TIME[2016-01-09 23:47:13 +09:00]] 版)
<https://github.com/jquery/globalize/blob/master/doc/api/plural/plural-generator.md>

[44] [CITE@ja[明るく楽しい引きこもり精神安定委員会天才(※ツイートは個人の見解であり、当委員会とは関係ありません)さんはTwitterを使っています 「仮に日本語が漢字を廃止して仮名だけになった時の複数規則表を考えてみたら壮絶すぎて泣いちゃった https://t.co/CvJpgURDRs」 / Twitter]], 午前9:35 · 2020年10月13日 [TZ[+09:00]], [TIME[2020-12-28T11:31:28.000Z]] <https://twitter.com/Wartemeinnicht/status/1315813393836601344>

[48] [CITE@ja[文字列リソース | Android デベロッパー | Android Developers]], [TIME[2022-09-02T09:24:09.000Z]], [TIME[2022-09-02T12:15:01.675Z]] <https://developer.android.com/guide/topics/resources/string-resource>

[51] [CITE@ja[XユーザーのEarly Birdさん: 「p. が page を示すのに対し、pages は pp. になる。l. が line を表すのに対し、lines は ll. になる。このように頭文字を重ねるのは、その名詞の複数を示すラテン語の略字の習慣による。その他、section が § に対し sections は §§、paragraph が ¶ に対し、paragraphs は ¶¶ なのにも注意したい。」 / X]], [TIME[午前0:53 · 2025年3月2日][2025-03-01T15:53:58.000Z]], [TIME[2025-03-03T01:52:33.000Z]] <https://x.com/41isyoichi/status/1895865100214681874>
