この文書では Firefox OS v1.2 以上で、独自の言語/スクリプトを含んだカスタムキーボードレイアウトをどうやって追加するのかを説明します。
Gaiaビルトインのキーボードアプリと、システム構造の状況
Firefox OSには、2013年10月以降、2つの主流なキーボード機能が実装されています。
- キーボード/スペルチェック辞書をビルトインのデフォルトGaiaキーボードアプリに含めるかを切り替えるビルドフラグ (バグ 884752を見よ)。
- Firefox Marketplaceからユーザにサードパーティ製キーボードアプリをインストール可能にするOSレベルの機能。これはFirefox OS v2.0で提供を開始します。詳細はバグ 816869 と バグ 964670を見よ。
電話機に新しいキーボードレイアウトを含めるには、Gaiaの中にカスタムレイアウトのファイルを置いてからビルドコンフィグを用いてキーボードアプリをビルドするか、自分自身のキーボードアプリを開発して電話機にインストールすることができます。それぞれの方法を見て行きましょう。
独自のキーボードアプリを開発する
Gaiaのビルトインアプリをテンプレートに使うか、フォークできます。 基本的な考え方は:
- マニフェストファイルにて、
role
プロパティ内にinput
のrole(役割)付きで宣言します。 permissions
プロパティ内で指定するinput パーミッションを持っているか確認します。
その後に、キーボードをインストールできて、ユーザが入力フィールドにフォーカスさせる度にスクリーンの下端側にキーボードが出るようになります。 これによって起きるスペースの問題は、下記のように処理できます:
- 古く、古典的な
window.resizeTo
を使って、アプリが占める領域を更新する。 - 新しく、輝かしい
navigator.mozInputMethod
APIを使って、所与の入力内容を変化させる; 詳しくは WebIDL of the API を見て下さい。これらのメソッドの多くは同じ文字列を出力しますが、異なるイベント(KeyboardEvent、CompositionEventなど)を生成します、このためユースケースに合うメソッドを使っているか確認して下さい。
記: LOL キーボード のデモは、キーボードアプリがどう構築されるのかをより良く理解する助けになり、かつあなた自身のキーボードアプリのテンプレートになるでしょう。
Gaiaキーボードアプリにカスタムレイアウトを含める
- 詳細情報は keyboard CONFIGURE details を見ます。辞書を追加したり、(アジア言語用の)双方向なIMEを入れたりしたい言語に依存します。
- 新規サポート言語のレイアウトを追加したい場合、それを build/config/keyboard-layouts.json 内の、言語のデフォルトレイアウトに追加したいかもしれません。
アジアのIME
東アジア言語 (中国語、日本語、韓国語) は幾千の文字を含んだ、遥かに複雑な活字を使っています。ハードウェア・ソフトウェアキーボード上に数千のキーを配置する方法はないので、ユーザは一連のシンボルを文字選択に変換するため、input method editor、略してIMEに頼っています。
シンボル変換の方法やIMEが "スマート" であるかは、選んだIMEや、実装自体や、またしばしば、この文書の範囲外のNLP scienceに依存します。メモリを節約するため、データをバイナリブロブにコンパイルしてアレイバッファとして読み込むのが推奨されます; 複雑なJSON構造は実端末では動作しないでしょう。
Gaiaキーボードアプリ内のIMEインターフェイス
シンボルを文字列に変換するIMEライブラリ(専門用語で''IM エンジン''という) がすぐ使える場合、レイアウトからシンボルを受け取って文字列を出力する定義済みインターフェイスが、Gaiaキーボードアプリ内に必要になるでしょう。今のAPIはGithub上に文書化されています。
我々は更にGaia内でAPIを洗練させるため、実装を促しています。
IMエンジンをあなたのレイアウトで動作させる
IMエンジンがあなたのキーボードレイアウトで動作するようにするには:
- IMエンジンに新規レイアウトを導入する、下記記載の通りに。
imEngine
プロパティでIMエンジンを参照する。レイアウトが有効な時、キーボードアプリはkeyboard/js/imes/<imEngine>/<imEngine>.js
にあるスクリプトをロードするでしょう。- スクリプトがロードされて初期化された時、キー/文字を送受信するためにAPIをセットアップします。
- ユーザ入力に応答を望むあらゆることをします。ユーザがキーボードのキーをタップした時、典型的にはIMエンジンに送られます。
知られている実装
- JSZhuyin は繁体字向けの最初のGaiaキーボードのアジアIMエンジン実装でZhuyin IMEを組み入れています。
- JSKanji は日本語用のプロトタイプIM エンジンです。
- JSPinyin は簡体字向けに書かれていてピンイン記号で動作します。
- デモとしてChewing (C/C++ の繁体字用オープンソースZhuyin IME) はEmscriptenでクロスコンパイルされてGaiaキーボードにリンクされています。
- JSHangul は韓国語用のプロトタイプIM エンジンで、現在開発中です。
ローカライズ担当者の視点からの新規ロケール
記: この節は主にアルファベットの言葉について当てはまります; (アムハラ語のような)アブギダ や、(中国語のような)象形文字システムはもっと複雑です。
一般的に、新規ロケール追加には2つの事が必要です: キーボードレイアウト と 辞書(テキスト予想機能用に)です。
キーボードレイアウトを作成する
キーボードレイアウトファイルはJavaScriptファイルに含まれていて、どのキーがキーボードにあるかと、どのキーがどの文字とシンボルになるかを、長押しで使える2つ目のオプションを含めて定義します。最も率直な方法は、既存のキーボード GitHub から取って、名前を変更して調整する事です。
最初にヘッダを変更する必要があります。キーボードが en-US に近く、ロケールをスコットランド ゲール語 (gd)としてみましょう。こうなっているのを:
Keyboards.en = { label: 'English', shortLabel: 'En', imEngine: 'latin', types: ['text', 'url', 'email', 'number', 'password'], autoCorrectLanguage: 'en_us', menuLabel: 'English',
こう変更します:
Keyboards.gd = { label: 'Scottish Gaelic', shortLabel: 'gd', imEngine: 'latin', types: ['text', 'url', 'email', 'number', 'password'], autoCorrectLanguage: 'gd_gb', menuLabel: 'Gàidhlig',
label 欄は
英語でのあなたの言語で、shortLabel
欄は最大3文字です; これは画面上のキーボードに表示される省略形で、ユーザが現在使っている言語がわかるようになっています。ISOコードも使えますが、その他の適切なものも使えます。menuLabel
欄はあなたの言語での言語名です: これはユーザがメニューオプションで見るものです。
レイアウトが終わった場合、唯一調整が必要となる事は、(UIでは長押しでアクセスできる) 代替文字です:
alt: { a: 'áàâäåãāæ', c: 'çćč', e: 'éèêëēę€ɛ', i: 'ïíìîīį', o: 'öõóòôōœøɵ', u: 'üúùûū', s: 'ßśš$', S: 'ŚŠ$', n: 'ñń', l: 'ł£', y: 'ÿ¥', z: 'žźż', '.': ',?!;:' },
長押し時の文字の順番と文字数の両方を変更できます。この場合、ゲール語のユーザは "鋭アクセント" よりも "重アクセント" をよく使うため、順番をこう変更します:
a: 'àáâäåãāæ',
ドットつき子音のオプションを与えたいため、このような新規行を追加します:
b: 'ḃ',
たぶん代わりのレイアウト(数字や句読点など用) や、通貨シンボルが正しく表示されているかを確認したくなるでしょう。
辞書を作成する
変換辞書もあると良いでしょう、ない場合はユーザは各単語毎にタイプしなければならず、単語予想を使えなくなります。
この用途で (理想的には) なんらかの形の、頻度で単語をランクづけるコーパスが必要になるでしょう。例えば there という単語は thespian より遥かによく出るので、ユーザが the とタイプした時に、 there は thespian より前にサジェストされるべきです。
これは辞書 (XML ファイル; 既存のものはここで見られます)の中で、1 (最小頻度) から 255 (最大頻度) を各単語 (または 行) に割当てることで完了します。次が作成を要するものです:
<wordlist locale="gd" description="Gàidhlig" date="1401554807" version="1"> <w f="255" flags="">a</w> <w f="254" flags="">an</w> <w f="247" flags="">agus</w>
素早く汚い辞書 (例えば大きなテキストを取ってきて頻度を数えたもの) でも役立つでしょう。あなたのロケールでそんなデータが全くなく、デジタルテキストが多くない場合には、言語の知識を使って、共通経験を元に手動で単語のランクづけをします。
ファイルをビルドする
いったん js と 辞書ファイルができたら、ここのgaiaディレクトリ に移動してMakefile を開きます。辞書の名前をリスト (例えば gd_wordlist.xml と言う場合) に追加して、置きます:
ga.dict \ gd.dict \
gd_worldlist.xml
ファイルがフォルダに入っているのを確認して、次を実行します $ make gd.dict
ここまで来たけども、.dict ファイルをビルドする最終ステップで詰まった場合、バグ登録して (Componentは: Gaia Keyboard) ファイルを添付して何が問題なのかを説明して下さい。誰かが助ける事ができるでしょう。パッチをプルリクエストとして投稿するのを確認して for review to someone(だれかのレビュー用)のフラグを立てます、そうしないとバグは気づかれないでしょう。
あなたの新ロケールをテストする
新規ロケールのビルドとコミットを終えたら、新キーボードと事象をテストする最速の手順は、キーボードアプリを走らせる我々のwebベースのデモページ です。En をクリックしてロケールを循環させて下さい。あなたのぶんが見えない場合、(右上の)スパナのシンボルをクリックして、テストしたいキーボードを tick/untick します。
議論と質疑
dev-gaia メーリングリストに来るか、 irc.mozilla.org の #gaia チャンネルに来て下さい(詳しくは Mozilla IRC へ)。#mozilla-taiwan はこのトピック向けの、中国語のデファクトのチャンネルです。