web-dev-qa-db-ja.com

翻訳された変数の設定をコードにエクスポートする方法は?

カスタムモジュールで、 Variable モジュールのAPIを実装することにより、いくつかの構成変数を定義します。モジュールは多言語サイトプロジェクトの一部であるため、これらの変数の一部は翻訳可能である必要があります。

私のhook_variable_info()実装では、これらの変数は'localize' => TRUEそのため、変数変換モジュール( 国際化 の一部)が提供する多言語設定>変数インターフェースで使用できます。ただし、デフォルトの状態は翻訳されません。したがって、変数を翻訳するには、サイト管理者がページにアクセスして、モジュールの変数を選択する必要があります。

モジュールのインストール時にカスタム変数を自動的に翻訳する必要があります。

モジュールはすでに他の構成をエクスポートするために機能を使用しているので、機能に基づくソリューションは素晴らしいでしょう。しかし、それは純粋にコードベースにすることができます。

7
Pierre Buyle

pdate:変数変換モジュールの最新バージョン(つまり7.x-1.7)では、変換された変数のリストはlanguage変数レルムコントローラのlist変数。次のコードは、レルムコントローラーを使用して、モジュールhook_enable()実装から変換された変数を設定する方法を示しています。

function MODULE_enable() {
  // Get the language variable controller.
  $controller = variable_realm_controller('language');
  // The list of translatable variables.
  $translatable_variables = $controller->getEnabledVariables();
  // The list of variables that could be translated.
  $available_variables = $controller->getAvailableVariables();
  // Add our variables to $translatable_variables.
  foreach ($available_variables as $name) {
    // Translate user mail messages.
    if (preg_match('/^user_mail_[a-zA-Z_\[\]]*\[mail_part\]$/', $name)) {
      $translatable_variables[] = $name;
    }
  }
  $translatable_variables = array_merge($translatable_variables, array(
    'user_registration_help',
    'user_picture_guidelines',
    'maintenance_mode_message',
    'menu_main_links_source',
    'menu_secondary_links_source',
  ));
  // Save the updated list of translatable variables.
  $controller->setRealmVariable('list', array_unique($translatable_variables));
}

pdate:これは、古いバージョンの変数変換モジュール(<7.x-1.7)を使用している場合を除いて、行う方法ではありません。

翻訳された変数の名前はi18n_variable_conf変数に格納されます。この変数自体は、Strongarm(または同様のソリューション)を使用してエクスポートできません。私は古いトリックの使用を終了しました:hook_init実装で変数をチェックし、必要に応じて設定します。 foreachコントローラの配列には、翻訳される変数の名前が含まれています。

/**
 * Implements hook_init();
 */
function MODULE_init() {
  $i18n_variable_conf = variable_get('i18n_variable_conf', array());
  $i18n_variable_conf_updated = FALSE;
  foreach(array(...) as $name) {
    if (!in_array($name, $i18n_variable_conf)) {
      $i18n_variable_conf[] = $name;
      $i18n_variable_conf_updated = TRUE;
    }
  }
  if ($i18n_variable_conf_updated) {
    variable_set('i18n_variable_conf', $i18n_variable_conf);
    variable_set('i18n_variable_list', variable_children($i18n_variable_conf));
    cache_clear_all('*', I18N_VARIABLE_CACHE, TRUE);
  }
}

機能ベースのソリューションと比較して、これは構成された変数の設定を適用し、手動編集をキャンセルします。これは望まれる場合と望まれない場合があります。私の場合はそうでした。

このソリューションの私の唯一の問題は、各要求にいくらかのオーバーヘッドがあったことです。

4
Pierre Buyle

機能に基づくソリューションは strongarm である必要があります。ただし、その機能は(まだ)存在しません http://drupal.org/node/1086986

1
jcisio