ロケール コードを処理するための IETF 仕様は確かに業界の「ベスト コモン プラクティス」であると思いますが、下位互換性などを維持するために妥協がないわけではありません。最も重要な国際化ライブラリと標準 (Unicode、ICU) で使用されているため、ニーズに合わせて調整することをお勧めします。
BCP47/RFC5646セクション 4.4.1では、35 文字のタグの長さを推奨しています。
language = 8 ; longest allowed registered value
; longer than primary+extlang
; which requires 7 characters
script = 5 ; if not suppressed: see Section 4.1
region = 4 ; UN M.49 numeric region code
; ISO 3166-1 codes require 3
variant1 = 9 ; needs 'language' as a prefix
variant2 = 9 ; very rare, as it needs
; 'language-variant1' as a prefix
total = 35 characters
Figure 7: Derivation of the Limit on Tag Length
ただし、(日付や時刻の形式などのロケールに依存するデータの一部を示す地域情報ではなく) 言語とスクリプトのみに関心がある場合は、最大 13 文字で間に合わせることができます。
実際には、ほとんどのタグは言語の 2 文字だけになります。私が定期的に扱い、スクリプト サブタグを必要とする唯一の一般的な例はsr-Latn
、and sr-Cyrl
(それぞれ、ラテン語またはキリル文字で書かれたセルビア語)、zh-Hant
(繁体字中国語)、およびzh-Hans
(簡体字中国語) です。また、ほとんどの場合、これらのロケール コードの実世界の例のほとんどが 17 文字の制限に収まる必要があることを意味するバリアントは必要ありません。