大阪弁変換のメソッドを String クラスに追加する
Ruby では、文字列は String クラスに属するらしく、しかもなんとその String クラスに簡単にメソッドを追加できるようなので「to_osaka」というメソッドを追加して
str = '文字列' puts str.to_osaka
これで文字列が大阪弁に変換されて表示されるようにしたい!と思ったので作ってみました。
コードは下記のような感じになりました。
class String def to_osaka str = self load_osaka_dic @osakadic.each do |key, value| str.gsub!(key, value) end return str end private def load_osaka_dic @osakadic = {} open('osaka.dic') { |f| f.each_line { |l| if l.chomp.length > 0 words = l.chomp.split(/ /) @osakadic[words[0]] = words[1] end } } end end hyoujyun = 'Rubyを勉強しているのですが、なかなか思うように動かなくて、どうしていいものかわかりません。毎日ちょっとずつ進めていきたいと思っているのでどうぞ宜しくお願いします。' puts hyoujyun.to_osaka
今回は大阪弁は http://www.vector.co.jp/soft/dos/amuse/se003170.html こちらにあるソフトに同封されている辞書を使わせて頂きました。このファイルには「ありがとうございます おおきに」という感じに、1行に1つ「単語 訳」が書いてあります。to_osaka が呼ばれると、まず load_osaka_dic というメソッドが呼ばれて、辞書の内容を @osakadic (ハッシュにしました)というパッケージ変数に読み込みます。
@osakadic['ありがとうございます'] = 'おおきに'
こんな感じですね。ちなみにこの load_osaka_dic はプライベートメソッドを定義しました。Ruby のクラスでプライベートメソッドを定義するには private と書いて、その下にメソッドを定義すればそれがプライベートメソッドになるようなのだ。
そして @osakadic 内に入った key と value を @osakadic.each で1つ1つ置換していきます。置換には gsub! というメソッドを使用しました。replace じゃなくて gsub! みたいです。replace は文字列全部を置換する用らしい。gsub はその文字列自体は変換しませんが、gsub! はその文字列自体を変換するらしい。なので
str1 = 'foobarbaz' str1.gsub(/foo/, 'bar') puts str1 str2 = 'foobarbaz' str2.gsub(/foo/, 'bar') puts str2
こうやると
foobarbaz barbarbaz
となります。
話が逸れましたが、このような gsub! メソッドを使って辞書内すべての単語と置換したら、それを返します。これでだけです。
実行結果は、こんな感じです。
Rubyを勉強しとるのやけどアンタ、なかなか思うように動かなくて、どうしてええものかわかりまへん。毎日ちーとばかしずつ進めていきたいと思っとるのでどうぞ宜しくお願いしまんねん。
出たーーーーーー。でも、なんか大阪のおっさんみたいな口調になってしまいました…。まぁいいか。。。