多言語EPUBの作成において考慮すべき技術要件

先日に引き続き、EPUB3で多言語混在の文書を作るために、考慮にいれるべきことを整理してみます[1]

第一:言語の指定

EPUBファイルでは、日本語、英語、中国語というような言語の中でパッケージのデフォルトとなる言語を指定します。これはパッケージのメタデータに言語を指定するdc:languageという要素があり、そこに指定します[2]。このほか、メタデータの要素によっては言語を指定できるようになっています。

本文中で複数の言語を混在させるときには、コンテンツの各ファイル、またはその一部の要素やテキストの範囲に対して言語を指定します。

EPUB3のコンテンツの表現(XHTML5)では、任意の要素にlangまたはxml:langで言語を指定できます。xml:langはHTML形式とXHTML形式に移行しやすくするためのものなので、必ずlangが同時に指定されていなければなりません[3]。XHTMLをサポートしていないXML処理系で使うことを想定するのでなければ、XHTMLとして使うときでもlang属性のみを指定すれば良いことになります。

さらに、言語だけではなくてスクリプトを指定しなければならない場合があります。例えば、日本語文章で良く使われる外来語は、カタカナで表すこともラテン文字で表すこともできます。もっと、極端な例を挙げますと、ウイグル語のように、政治的な理由で、アラビア文字、キリル文字、ラテン文字、アラビア文字による表記強制を変遷している言語もあります。このように言語が同じでもスクリプトが変わることがあるわけです。但し、Unicodeでは文字コードからスクリプトを推定できることが多く、明示的に指定しなくてもあまり問題にはなりません。

第二:ページを読み進める順序

多言語文書では、ページを読み進める方向、ページの中で文字を書き進める方向を指定したいことがあります。日本語では同じ文書を、横書きでも縦書きでも表記できます。

EPUBでは、ページを読み進める順序は、spineの中のpage-progression-direction属性で全体のデフォルト値を指定します[4]。横書き、縦書きといった、文字を読み進める方向は、ファイルごとにwitiring-modeで指定できます。ページ単位で読む進める方向を変更できます。つまり縦組みの書籍(右開き)を指定しておき、一部のページを横組に指定できます。

日本語の縦書き書籍では、本文は縦組み、参考文献や索引は横書きというような例が頻繁に発生します。一冊の書籍に異なる読み進め方向を指定することはファイル単位ではできますが、現在のEPUBの仕様では、縦組みの書籍の中で後付け(たとえば、参考文献と索引)を複数のファイルで表現し、その後付け全体を左開きにするような指定はできません。

同じような理由で、英語(左開き)とアラビア語(右開き)を一つのパッケージにすることは現在のEPUB3仕様ではできません。

第三:文章中の多言語テキストの表示(表記)

第三は、文章の中で多言語の記述が存在していたときに、それをうまく表示できるかどうか、ということが問題になります。EPUBではコンテンツをUnicodeの文字列で表します。その文字列をEPUBリーダーが正しく表示できるかどうかということです。日本語や中国語のように、原則として正方形の文字を並べるだけの表記をするときは、Unicodeのコードポイントから文字の形を表示すれば良いので処理は簡単です。但し、縦書きでは句読点など一部の文字の形を入れ替える必要があります。

しかし、アラビア文字、インドの文字、東南アジアの文字は、Unicodeのコードポイントから文字の形にするだけでは足りません。アラビア文字、インドの文字は複雑なリガチャ処理が必要です。また、東南アジアの文字は文字コードの並びから音節を組み立てる処理が必要です。このような言語はEPUBリーダーがスクリプトを処理する機能を備えていないと正しく表示できません。

Unicodeの漢字は、日本語、中国語(簡体字)、中国語(繁体字)、韓国語で同じ字体の漢字を一つのUnicodeのコードポイントに割り当てているため、Unicodeのコードポイントだけでは言語を決めることができません。漢字の中には、日本語、中国語(簡体字)、中国語(繁体字)で同じ字体であっても、字形が微妙に異なるものがあります[5]

現在のEPUBリーダーの多くは、多言語を表示できるフォントを内蔵しています。しかし、日本語のフォントで中国語の漢字を表示したりすると、現地のユーザーが違和感を感じる結果になります。そこで、特にCJKが混在するときは言語またはそれに代わるタグ・属性の指定が必須となります。

実用的な多言語のEPUBを作成するには、このようなことを考慮してEPUB3を作るにはどうすると良いか、また、そうして作ったEPUBファイルをEPUBリーダーがうまく表示できるかを調べてみなければなりません。

[1] この記事は、10/25:CAS-UB:多言語機能に魂を入れるため、ドキュメントの多言語化と、EPUBの多言語化を考える、10/29:Noto Sans CJK, Source Han SansフォントとAH FormatterによるPDF生成の続きです。
[2] The DCMES language Element
[3] 3.2.5.3 The lang and xml:lang attributes
xml:lang属性はXMLの仕様で定義された汎用属性。lang属性はHTML/XHTML仕様で導入されている属性です。
[4] 3.4.12 The spine Element
[5] 字体とは字の形の抽象的な概念。字形は具体的な字の形。字形はグリフとも言う。