新規作成 | 一覧 | RSS | FrontPage | 検索 | 更新履歴
[Calendar/When/Ruby/2.APIの使用例/1.前提となる概念/3.多言語対応文字列] (前:補足|次:文字列変換) (English)

3.多言語対応文字列

M17n (Multilingualization) String (多言語対応文字列)

本ライブラリで String に替わって用いているサブクラス When::BasicTypes::M17nは、多言語対応文字列です。諸々の Locale に対応した文字列と参照を保持しています。

参照を保持するのは、その多言語対応文字列が表現する概念を曖昧性なく特定するためです。 これは、根拠とする dictionary, thesaurus or authority をWhen::BasicTypes::Codeが明示するのと同じ思想です。

→関連クラス図 02.BasicTypes

例 : March

Resource('_m:Calendar::Month::March') はWhen::BasicTypes::M17nクラスのオブジェクトです。

loc#translate(loc)#reference(loc)
'ja''3月' https://ja.wikipedia.org/wiki/3%E6%9C%88
'en''March' https://en.wikipedia.org/wiki/March

translateメソッドは 演算子 '/' に aliasされるので、Resource('_m:Calendar::Month::March').translate('ja') は Resource('_m:Calendar::Month::March') / 'ja' と書いても同じです。

例 : Monday

多言語対応文字列を色々なクラスのオブジェクトからなる階層の中で定義することもできます。

例えば http://example.org/ResidueTerms に週日を剰余類When::Coordinates::Residue で表現する下記の内容のファイル(*)があったとします。

 BEGIN:B:M17N
   NAMESPACE:[en_ns=https://en.wikipedia.org/wiki/,
              ja_ns=https://ja.wikipedia.org/wiki/]
   LOCALE:[=en_ns:, ja=ja_ns:]
   LABELS:[ResidueTerms]
 
   BEGIN:CO:RESIDUE
     LABEL:[Week, 週]
     DIVISOR:7
 
     BEGIN:CO:RESIDUE
       LABEL:[Monday,月曜日]
       REMAINDER:0
     END:CO:RESIDUE
 
   END:CO:RESIDUE
 END:B:M17N

これを読み込むと、表のようなオブジェクトが生成されます。

IRIclasslabel
http://example.org/ResidueTerms When::BasicTypes::M17n ResidueTerms
http://example.org/ResidueTerms::Week When::Coordinates::Residue Week
http://example.org/ResidueTerms::Week::Week When::BasicTypes::M17n Week
http://example.org/ResidueTerms::Week::Monday When::Coordinates::Residue Monday
http://example.org/ResidueTerms::Week::Monday::Monday When::BasicTypes::M17n Monday

(*)RFC5545に対応したことを謳うには iCalendarのファイル形式への対応は必須でした。そこで、開発規模を抑えるために iCalendar以外のオブジェクトの外部表現にもiCalendarのファイル形式を流用することにしました。 XML や RDF についても調査しましたが、微妙に異なるバリエーションの形式が複数存在しているようなので、 現時点では実験的に When::Coordinates::SpatialこんなXMLで読み込めるようにしてみた以外は、取り入れていません。 ただし iCalendarのファイル形式を流用する際、namespace の定義など将来のXML対応時に必要になるような拡張をあらかじめ行っています。