ハワイ語表記への文字列変換フォーム (JavaScript)
ハワイ語は,ハワイ諸島先住民の言語で,アルファベットがたった12文字しかない。
自分の名前をハワイ語に変換すると,どうなるだろうか?
文字が少ないので音も少ない
「s」「t」の音は,存在しない。かわりに「k」になる。
Saitama(サイタマ)→Kaikama(カイカマ)
「f」が存在せず「p」になる。
子音1文字だけの音節というのは存在せず,子音に「a」がつく。
また子音前の「n」が抜ける。
従って,
Sanfransisco(サンフランシスコ)→Kapalakiko(カパラキコ)
となる。
この,文字列→ハワイ語 の変換を自動で行ってくれるような入力フォームを,JavaScriptで作ってみた。
ページはこちら
ハワイ語 音声変換
http://www.name-of-this-site.org/language/hawaii/hawaii.html
アルファベットで文字列を入力して,変換ボタンを押すと,
ハワイ語での表記になる。
固有名詞などを入れて楽しんでみてください
ソースコードは下記
<html> <head><title>ハワイ語 音声変換</title></head> <body> <div align="right"><a href="#" onClick="history.back()">戻る</a></div> ハワイ語表記に変換したい文字列を入力(例: sanfransisco )<br> <input type="text" size="30" id="str_orig"> <input type="button" value="変換" onClick="translate()"> <br> <div id="translate_space"></div> <br><hr><br> <div id="script_dump"></div> <script language="JavaScript" id="script_tag"> // ページ読み込み時 window.onload = function(){ script_dump.innerHTML = "このスクリプトの内容:<pre>" + document.body.innerHTML .replace(/&/g,"&") .replace(/>/g,">") .replace(/</g,"<") + "</pre>" ; }; // 変換 function translate() { translate_space.innerHTML = (function( before_str ){ // 一般アルファベット中の子音 var consonants = "bcdfghjklmnpqrstvxz"; // ハワイ語の変換文字列のペア (正規表現可) // 早く適用したい物は上に持ってくること // $ と \ による後方参照可。\ はエスケープすること var HawaiiMap = [ // 削除・短縮 "n([" + consonants + "])", "$1", "sh", "h", "ch,th", "k", "ph", "p", // 子音変換 "c,d,g,j,q,s,t,z", "k", "b,f", "p", "r", "l", "y", "i", "v", "w", // 変換されない文字 //"m", "m", // 子音連続 "([" + consonants + "])\\1", "$1", "([" + consonants + "])([" + consonants + "])", "$1a$2", // 子音終端 "([" + consonants + "])($| )", "$1a$2" ]; // 文字列変換器 var StringConverter = function( m ){ this.char_map = m; }; StringConverter.prototype = { // 変換文字列ペア // コンストラクタで代入 char_map : {}, // 変換するメソッド str_convert : function( s ){ var max_pairs = this.char_map.length / 2; // ペアごとに for( var i = 0; i < max_pairs; i ++ ) { var char_orig = this.char_map[ 2 * i ].split(","); // ペア内で長い文字順に char_orig.sort( function( a, b ){ return ( a.length < b.length ) ? 1 // b(文字数の長い方)を先に置く : -1 // aを先に置く ; } ); // 文字列ごとに for( var j = 0; j < char_orig.length; j ++ ) { s = s.replace( // 全探索 + 大文字小文字無視 new RegExp( char_orig[ j ], "gi" ), this.char_map[ 2 * i + 1 ] ); } // 変化の過程のダンプ //alert( this.char_map[ 2 * i ] + ":" + s); } return s; } }; // 変換器生成 var con = new StringConverter( HawaiiMap ); // 実行 var after_str = con.str_convert( before_str ); return "(前) " + before_str + "<br>(後) <font color='red'>" + after_str + "</font>"; })( str_orig.value ); // ボックスの値を渡す } </script>
コードの解説
"変換規則" を表すオブジェクトと,変換器を表すオブジェクトとを設け,変換規則を入れ替えればハワイ語以外の文字列にも使いまわせるようにした。
変換規則は正規表現を利用可能で,同じ子音の連続を検出するために「\1」の後方参照を利用している。
また無名関数を使うおかげで,
innerHTML = 〜〜
の〜〜の部分に全ての処理を詰め込むことができる。
innerHTMLを書き変えたいんだ,という大目的を考えてから詳細処理のコーディングに取りかかれるわけなので,直感にあったコーディングができて良いと思う。
太平洋の言語について
言語について言えば,こういった「少ない音価への変換」は,太平洋の島々の言語では共通している現象のようだ。
なお,Wikipediaの「ポリネシア諸語」の項目によると,「krismas」はハワイ語で「Kalikimaka」になるべきだが,上記のフォームでは「kalikamaka」になってしまう。
こういうのは例外とみなす事になる。
ポリネシア諸語
http://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%AA%E3%83%8D%E3%82%B7%E3%82%A2%E8%AA%9E
なお,ハワイ語の音の変換については下記サイトが詳しい。
ハワイ語の教訓
http://www.toskyworld.com/archive/2005/ar0509hawaii.htm
リンク元
「アロハユー HAWAIIAN LIFE」という南国系のWebサイトに紹介された。
自分の名前をハワイ語表記に変換できるサービスをご紹介
http://www.alohayou.com/2008/10/hawaiian_olelo/
関連する記事:
マダガスカル語の入門用リンク集 (辞書や挨拶,基本文法など) - 主に言語とシステム開発に関して
http://d.hatena.ne.jp/language_and_engineering/20110521/p1
マレー語を独学で学習するためのリンク集 - 主に言語とシステム開発に関して
http://d.hatena.ne.jp/language_and_engineering/20121122/p1
アフリカ大陸の言語分布を,国名付きの地図で把握する - 主に言語とシステム開発に関して
http://d.hatena.ne.jp/language_and_engineering/20120225/p1