メインコンテンツへスキップ
見出し画像

lang属性"fr-CA"ってどういうこと?という驚きが、あらためてlang属性の意味を考えるきっかけになりました

    このサイト、lang="fr-CA"なの?2度見しました

    HTMLを書いていると、言語指定として lang="ja"や lang="en-US"という表記はよく見かけます。
    先日たまたまウェブサイトを見ていて、lang="fr-CA" という指定を目にし、カナダで遠く離れたフランス語が使われていることに驚きました(たまたまウェブサイトを見ていたのですが、フランスのサイトを見ていると思ったらカナダのサイトだった、というわけです)。

    画像
    言語選択セレクター - https://www.bonjourquebec.com/

    全く存じ上げていなくて申し訳ない限りだったのですが、調べてみると、カナダのケベック州は北米の英語圏の中で唯一、フランス語をマジョリティとする独自の文化を持っています。ジャズフェスティバルで有名なモントリオールもケベック州にあります。
    さらに調べてみて、ケベック州の住民にとってフランス語は単なる言語ではなく、歴史とアイデンティティそのものだということを知りました。

    フランス語を保護する法案96(Bill 96)

    この言語を守るための強力な法律が「法案96(Bill 96)」です。2022年に可決されたこの法律は、日常生活やビジネスにおいてフランス語の使用を強く義務付けるものだそうです。

    2026年現在、この法律は本格的な施行段階に入っています。商品のパッケージにはフランス語の翻訳を記載することが必須となり、店舗の看板でもフランス語を他言語の2倍以上のスペースや時間で表示することが厳しく監視されています。従業員25人規模の中小企業にも社内コミュニケーションのフランス語化が求められており、ケベック市場でのビジネスにはこの言語対応が前提条件となっています。Webサービスに関しても同様の措置が求められます。

    あらためて確認するlang属性の規格

    ケベック州の事例を知り、ウェブサイトにおけるlang属性の役割をあらためて調べ直しました。この属性値は、IETFが策定した「BCP47」という世界的規格に基づいています。

    BCP47に基づく言語タグの構造

    BCP47の言語タグは、主に「言語」「文字体系」「地域」の3つの要素を含む最大7つの要素(サブタグ)を決められた順番で繋ぐという、非常に厳格かつ拡張性の高い構造を持っています。

    画像
    https://www.w3.org/International/articles/language-tags/index.ja
    • 言語(Language):ISO 639(ISO 639-1 / ISO 639-2 / ISO 639-3)に基づく2文字または3文字(例:ja、en、fr) ※必須

    • 拡張言語(Extended Language):ISO 639-3に基づく3文字(※基本言語と重複するため、現在は原則非推奨・互換性のために存在) ※省略可

    • 文字体系/用字(Script):ISO 15924に基づく4文字(例:Hans、Hant、Latn) ※省略可

    • 領域/地域(Region):ISO 3166-1の国コード(アルファベット2文字)または UN M.49の地域コード(数字3桁)(例:JP、US、419) ※省略可

    • 変種(Variant):IANA言語サブタグ登録簿に基づく特定の表記法・方言・歴史的異体(例:hepburn、pinyin、1994ac) ※省略可

    • 拡張(Extension):RFC 6067等に基づく単一文字のプレフィックス(u や t など)で始まるサブタグ。ロケールやカレンダー等を指定(例:u-ca-japanese) ※省略可

    • 私用(Private Use):IANAに登録されていない独自のルールや社内システム専用の情報を付与するサブタグ。プレフィックス x- で始まり、以降は英数字で自由に定義(例:x-internal、x-custom) ※省略可

    こんなにあるんですね。一般的なウェブサイトのHTML(lang属性)で使われるのは「地域」までがほとんどですが、プログラミングの国際化対応(日付や通貨の自動変換など)では、その後ろのサブタグが用いられることもあります。

    • ja-Latn-hepburn:日本語(ja)を、ラテン文字(Latn)の、ヘボン式(hepburn)で表記するという「変種」の指定。

    • es-419:スペイン語(es)の中で、特定の国ではなく国連の地域コード(419)を使い「ラテンアメリカ圏のスペイン語全般」を指定する方法。

    • en-US-u-cu-jpy:アメリカ英語(en-US)の表記ルールを保ちつつ、通貨(cu)だけは「日本円(jpy)」として扱うという高度な指定です。

    • en-x-internal:x 以降はプライベート利用の領域で、社内システムなどで自由に意味を持たせて運用することができます。

    中国語における文字体系の指定

    ちょっと話が逸れてしまったので、「言語」「文字体系」「地域」の3つの要素にフォーカスしてみます。この規格が特に重要になるのが、中国語の指定です。中国語には「簡体字」と「繁体字」という2つの文字体系が存在します。
    現在の推奨となっているのは、地域ではなく文字体系で指定する方法です。簡体字には zh-Hans を、繁体字には zh-Hant を用います。以前使われていた zh-CN(中国本土)や zh-TW(台湾)という地域ベースの指定では、「香港向けの繁体字」や「シンガポール向けの簡体字」といった組み合わせを正確に表現できないからです。

    文化圏に合わせて地域まで指定する場合

    地域による語彙の違いを明示したい場合は、言語、文字体系、地域を組み合わせて記述します。中国本土向けなら zh-Hans-CN、台湾向けなら zh-Hant-TW、香港向けなら zh-Hant-HKとなります。

    なぜ中国語のlang指定が極めて重要なのか

    中国語の lang 指定を間違えると、単なるマナー違反にとどまらず、ブラウザ上の表示に直接的な不具合をもたらします。言語指定によって、同じ漢字でも表示される字形が変わるためです。

    lang属性による字形の違い

    日本語(ja)、簡体字(zh-Hans)、繁体字(zh-Hant)では、共通の漢字でも正しいとされるデザインが異なります。
    例えば「骨」という字は、日本語と繁体字では上部の折れが左から右に向かいますが、簡体字では右から左へ折れます。「雪」の下部や「刃」の点の位置なども、言語によって異なります。

    画像
    日本語、簡体字、繁体字の違い

    簡体字のページで誤って lang="ja" と指定すると、中国語の文章の中に日本語特有の字形が混ざり、ネイティブスピーカーにとって違和感のある画面になってしまいます。

    Unicodeの経緯とCJK統合漢字

    国によって形が違う漢字に、なぜ同じ文字コードが割り当てられているのか気になるところです。理由は、1980年代から90年代にかけてUnicodeが設計された当時の容量制限と、文字に対する考え方にあるそうです。

    初期のUnicodeは、世界中の文字を16ビット(65,536文字)の枠内に収める必要がありました。そこで設計者たちは、「文字の抽象的な概念」にコードを割り当て、「見た目のデザインの違い」はフォントの問題として扱う方針を採りました。これにより、起源が同じで構造が似ている日中韓の漢字は「CJK統合漢字」として1つのコードに統合され、大幅に容量を節約しました。Noto Sans CJK などがその例です。

    この設計の結果、Unicodeの文字コードだけではどの国の字形を表示すべきか判断できなくなりました。ブラウザは、HTMLに記述された lang 属性を読み取って初めて、適切なフォントを選択できます。

    まとめ

    lang="fr-CA"という見慣れない指定への驚きから始まり、法案96による言語保護の現状、BCP47の規格、そしてUnicodeの歴史までをつらつらと辿ってみました。
    HTMLの冒頭に何気なく書いているlang属性には、地域の文化を保護する切実な背景と、コンピュータの制約と戦った技術者たちの歴史が詰まっています。BCP47は単なる言語のラベルではなく、方言、日付、通貨、暦といった「文化のフォーマット」全体をカプセル化できる非常に強力な規格なのですね。国際化や、それに伴うWebアクセシビリティの担保は、国際文化的背景にも大きく影響を受けるという良い勉強になりました。


    あなたへのおすすめ