多言語変数

JauneBrillantさんのユーザアバター

原文: Multilingual Variables

いくつかのテキストや設定は Drupal 変数として格納されています。そしてサイト名、スローガンのようなサイト全体のものや、モジュール特有のものは、管理ページを通して編集できます。Internationalization は、これらの変数を翻訳可能にします。

コンテンツやタクソノミー以外の部分をどうやって翻訳できるか考えていたのですが、i18n で出来るようになっていたようです。やり方が面倒なので現状機能として提供されているがインターフェイスは用意してない(or できない)、という感じでしょうか。ユーザー登録メールや各種 description 欄も翻訳できます。

これらの変数を翻訳可能にするためには、Drupal がそれらを変数として使用する変数名を特定する必要があります。これはデータベースの「変数」テーブルか、コード内部を隅々まで検索すると見つけることが出来ます。Firefox を使用しているなら、目星をつけた入力欄あたりをドラッグ反転させて右クリックし、「選択した部分のソースを表示」すると見つけやすいです。

<input maxlength="128" name="site_name" id="edit-site-name" size="60" value="Site Name" class="form-text required" type="text">

これはサイト名の入力欄ですが、name="site_name" の部分が探している変数名です。最も一般的な翻訳設定としては以下の通りです。

翻訳したい変数が特定できたなら、「settings.php」ファイルに下記のような記述を加える必要があります:


/**
 * Multilingual settings
 * 
 * This is a collection of variables that can be set up for each language when i18n is enabled.
 * These are the basic ones for Drupal core, but you can add your own here.
 */
$conf['i18n_variables'] = array(
  // Site name, slogan, mission, etc..
  'site_name',
  'site_slogan',
  'site_mission',
  'site_footer',
  'anonymous',
  // Different front page for each language
  'site_frontpage',
  // Primary and secondary links
  'menu_primary_links_source',
  'menu_secondary_links_source',
  // Contact form information
  'contact_form_information',
  // For theme variables, read more below
  'theme_settings',
  'theme_garland_settings',
);

テーマ関連の設定に関して、それぞれのテーマは異なった変数で保存されています。通常は 'theme_THEMENAME_settings' という変数になっており、デフォルトテーマ設定に 'theme_settings' として合併されています。いくつかのテーマには他の固有変数があるかもしれないので、それらがどのように保存されているか調べるために、データベースの「変数」テーブルを見るか、Devel モジュールを利用する必要があります。

構成ファイルは通常 /sites/default/settings.php または /sites 以下のサブフォルダ内にあります。もしあなたがマルチサイト設定をしているなら、複数の構成ファイルがあるかもしれません。

ひとたび正しい設定が構成ファイルに追加されると、該当する管理ページで、それらは「多言語変数」としてマークされるでしょう。各言語に値を設定するためには、該当する管理ページでサイト言語を切り替えなければなりません。

settings.php を更新しただけの状態ではサイトデフォルト言語の変数にも値が入ってない状態になってしまうので、まずは管理ページをデフォルト言語で表示して「保存する」ボタンを押します。その後、たとえばサイト名を翻訳したいのであれば、/ja/admin/settings/site-information のように各言語へ切り替えて編集し、「保存する」ボタンを押します。

ユーザー登録メールを翻訳する

$conf['i18n_variables'] の配列に、以下のような変数をセットすると、翻訳メールを送信することが出来ます:


  // User configuration
  'user_registration_help',
  'user_mail_register_admin_created_subject',
  'user_mail_register_admin_created_body',
  'user_mail_register_no_approval_required_subject',
  'user_mail_register_no_approval_required_body',
  'user_mail_register_pending_approval_subject',
  'user_mail_register_pending_approval_body',
  'user_mail_password_reset_subject',
  'user_mail_password_reset_body',
  'user_mail_status_activated_subject',
  'user_mail_status_activated_body',
  'user_mail_status_blocked_subject',
  'user_mail_status_blocked_body',
  'user_mail_status_deleted_subject',
  'user_mail_status_deleted_body',

しかしDrupal はメールを UTF-8 で送信するので、UTF-8 に対応していない旧式メーラーなどで文字化けが起こるかもしれません。日本では一般的に ISO-2022-JP でエンコードすると安全であるかもしれません。