Top > 開発ガイド > コンポーネント開発Tips集 > 多言語化(メール)
多言語化(メール)
対象バージョン
当ドキュメントはRubricks-0.6.x向けです。
クラスの定義
Mailerクラスは「RubricksMailer」を継承してください。「RubricksMailer」は「ActionMailer::Base」を継承しています。
class Sample::SampleMailer < RubricksMailer end
テンプレートの準備
テンプレートは通常のRHTMLと同様の命名規約で準備をする必要があります。具体的には、上記のSampleMailerクラスの場合は「components/sample/sample_mailer」ディレクトリ内にテンプレートを準備することになります。
言語毎にテンプレートを準備して、各deliverメソッド内で上手く振り分けるようにしてください。その際、大抵の場合はRubricksUserが判定に必要になると思われます。
class Sample::SampleMailer < RubricksMailer
def sample_mail(ru)
template "sample_mail_#{ru.language}"
recipients ru.email_by_admin
from system_mail_address
subject 'Subject'
body :name => ru.login_name
end
end
=> components/sample/sample_mailer/sample_mail_chinese.rhtml
/sample_mail_english.rhtml
/sample_mail_japanese.rhtml
文字コード変換
メールの送信時に言語に合わせて文字コードの変換が必要となります。以下のいずれかの方法でRubricksMailerに言語をしらせることで、自動的に文字コード変換を行わせることができます。
1. 各deliverメソッドに「:language」オプションを渡す
class Sample::SampleMailer < RubricksMailer
def sample_mail(c1, c2, c3, options = {})
template "sample_mail_#{options[:language]}"
...
end
end
Sample::SampleMailer.deliver_sample_mail('C1', 'C2', 'C3', {:language => 'japanese'})
2. 各deliverメソッドの第一引数をRubricksUserオブジェクトとする
class Sample::SampleMailer < RubricksMailer
def sample_mail(ru)
template "sample_mail_#{ru.language}"
...
end
end
Sample::SampleMailer.deliver_sample_mail(RubricksLib.current_user)
3. 各deliverメソッドに「:ru」オプションを渡す
class Sample::SampleMailer < RubricksMailer
def sample_mail(c1, c2, c3, options = {})
template "sample_mail_#{options[:ru].language}"
...
end
end
Sample::SampleMailer.deliver_sample_mail('C1', 'C2', 'C3', {:ru => RubricksLib.current_user})
指定された言語によって、以下の通り文字コード変換が実施されます。
| 言語 | 変換後文字コード |
| chinese | UTF8 |
| english | UTF8 |
| japanese | JIS(ISO-2022-JP) |
なお、変換が行われる対象は「from」「subject」「body」となっています。 「subject」に多言語化キーを渡すと自動で多言語展開されます。多言語化キーを利用したい場合は、必ずキーのままで渡してください。sprintfフォーマットを利用したい場合は配列指定してください。
良い例:
class Sample::SampleMailer < RubricksMailer
def sample_mail(ru)
template "sample_mail_#{ru.language}"
recipients ru.email_by_admin
from system_mail_address
subject ['[_Sample_XXXXX]', ru.login_name]
body :name => ru.login_name
end
end
悪い例:
class Sample::SampleMailer < RubricksMailer
def sample_mail(ru)
template "sample_mail_#{ru.language}"
recipients ru.email_by_admin
from system_mail_address
subject RubricksLib.hl('[_Sample_XXXXX]', ru.login_name)
body :name => ru.login_name
end
end
